Implement IntoIterator for Events (#693)

* Add owned iterator for Events

* Change docs to not explicitly use into_iter() in example
diff --git a/src/poll.rs b/src/poll.rs
index 72f175e..c301ed5 100644
--- a/src/poll.rs
+++ b/src/poll.rs
@@ -1289,6 +1289,42 @@
     pos: usize,
 }
 
+/// Owned [`Events`] iterator.
+///
+/// This struct is created by the `into_iter` method on [`Events`].
+///
+/// # Examples
+///
+/// ```
+/// # use std::error::Error;
+/// # fn try_main() -> Result<(), Box<Error>> {
+/// use mio::{Events, Poll};
+/// use std::time::Duration;
+///
+/// let mut events = Events::with_capacity(1024);
+/// let poll = Poll::new()?;
+///
+/// // Register handles with `poll`
+///
+/// poll.poll(&mut events, Some(Duration::from_millis(100)))?;
+///
+/// for event in events {
+///     println!("event={:?}", event);
+/// }
+/// #     Ok(())
+/// # }
+/// #
+/// # fn main() {
+/// #     try_main().unwrap();
+/// # }
+/// ```
+/// [`Events`]: struct.Events.html
+#[derive(Debug)]
+pub struct IntoIter {
+    inner: Events,
+    pos: usize,
+}
+
 impl Events {
     /// Return a new `Events` capable of holding up to `capacity` events.
     ///
@@ -1436,6 +1472,28 @@
     }
 }
 
+impl IntoIterator for Events {
+    type Item = Event;
+    type IntoIter = IntoIter;
+
+    fn into_iter(self) -> Self::IntoIter {
+        IntoIter {
+            inner: self,
+            pos: 0,
+        }
+    }
+}
+
+impl Iterator for IntoIter {
+    type Item = Event;
+
+    fn next(&mut self) -> Option<Event> {
+        let ret = self.inner.get(self.pos);
+        self.pos += 1;
+        ret
+    }
+}
+
 impl fmt::Debug for Events {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         f.debug_struct("Events")