Get rid of `MaybeEmpty`

While we can't easily have an empty `Punctuated` with static storage,
since `punctuated::Iter` is just `slice::Iter`, we can absolutely create
an empty one of those.
diff --git a/src/derive.rs b/src/derive.rs
index 2705737..1fb0e8f 100644
--- a/src/derive.rs
+++ b/src/derive.rs
@@ -77,40 +77,24 @@
 
 impl Fields {
     /// Returns an iterator over the fields
-    pub fn iter(&self) -> MaybeEmpty<Iter<Field, Token![,]>> {
+    pub fn iter(&self) -> Iter<Field, Token![,]> {
         match *self {
-            Fields::Unit => MaybeEmpty::None,
-            Fields::Named(FieldsNamed { ref named, .. }) => MaybeEmpty::Some(named.iter()),
-            Fields::Unnamed(FieldsUnnamed { ref unnamed, .. }) => MaybeEmpty::Some(unnamed.iter()),
+            Fields::Unit => Iter::empty(),
+            Fields::Named(FieldsNamed { ref named, .. }) => named.iter(),
+            Fields::Unnamed(FieldsUnnamed { ref unnamed, .. }) => unnamed.iter(),
         }
     }
 }
 
 impl<'a> IntoIterator for &'a Fields {
     type Item = &'a Field;
-    type IntoIter = MaybeEmpty<Iter<'a, Field, Token![,]>>;
+    type IntoIter = Iter<'a, Field, Token![,]>;
 
     fn into_iter(self) -> Self::IntoIter {
         self.iter()
     }
 }
 
-pub enum MaybeEmpty<T> {
-    Some(T),
-    None,
-}
-
-impl<T: Iterator> Iterator for MaybeEmpty<T> {
-    type Item = T::Item;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        match *self {
-            MaybeEmpty::Some(ref mut x) => x.next(),
-            MaybeEmpty::None => None,
-        }
-    }
-}
-
 #[cfg(feature = "parsing")]
 pub mod parsing {
     use super::*;