Flatten ForeignItem into an enum

There is some duplication here but it is worth it for having foreign items
individually parsable and printable with Synom and ToTokens impls. This is also
more flexible as we add new types of foreign item, for example macros that can
expand to foreign items. A macro foreign item would not have a visibility and
some of the other fields previously held in the ForeignItem struct.
diff --git a/src/lib.rs b/src/lib.rs
index ed855c7..5fc447e 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -52,7 +52,7 @@
 #[cfg(feature = "full")]
 mod item;
 #[cfg(feature = "full")]
-pub use item::{Constness, Defaultness, FnArg, FnDecl, ForeignItemKind, ForeignItem, ItemForeignMod,
+pub use item::{Constness, Defaultness, FnArg, FnDecl, ForeignItem, ItemForeignMod,
                ImplItem, ImplItemKind, ImplPolarity, Item, MethodSig, PathListItem,
                TraitItem, ViewPath, ItemExternCrate, ItemUse,
                ItemStatic, ItemConst, ItemFn, ItemMacro, ItemMod, ItemTy, ItemEnum,