Enable rich API on 1.29.0
diff --git a/src/unstable.rs b/src/unstable.rs
index caf42ce..3e940ca 100644
--- a/src/unstable.rs
+++ b/src/unstable.rs
@@ -210,11 +210,29 @@
     fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) {
         match self {
             TokenStream::Nightly(tts) => {
-                tts.extend(
-                    streams
+                #[cfg(not(slow_extend))]
+                {
+                    tts.extend(
+                        streams
+                            .into_iter()
+                            .map(|t| TokenStream::from(t).unwrap_nightly()),
+                    );
+                }
+                #[cfg(slow_extend)]
+                {
+                    *tts = tts
+                        .clone()
                         .into_iter()
-                        .map(|t| TokenStream::from(t).unwrap_nightly()),
-                );
+                        .chain(
+                            streams
+                                .into_iter()
+                                .map(TokenStream::from)
+                                .flat_map(|t| match t {
+                                    TokenStream::Nightly(tts) => tts.into_iter(),
+                                    _ => mismatch(),
+                                }),
+                        ).collect();
+                }
             }
             TokenStream::Stable(tts) => tts.extend(streams),
         }
@@ -225,7 +243,24 @@
     fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
         match self {
             TokenStream::Nightly(tts) => {
-                tts.extend(streams.into_iter().map(|stream| stream.unwrap_nightly()))
+                #[cfg(not(slow_extend))]
+                {
+                    tts.extend(streams.into_iter().map(|stream| stream.unwrap_nightly()));
+                }
+                #[cfg(slow_extend)]
+                {
+                    *tts = tts
+                        .clone()
+                        .into_iter()
+                        .chain(
+                            streams
+                                .into_iter()
+                                .flat_map(|t| match t {
+                                    TokenStream::Nightly(tts) => tts.into_iter(),
+                                    _ => mismatch(),
+                                }),
+                        ).collect();
+                }
             }
             TokenStream::Stable(tts) => {
                 tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable()))