FEAT: Speed up Graph, StableGraph::map

Use Vec::extend instead of a push loop -- this improves performance.

Microbenchmark results:

```
 name              old ns/iter  new ns/iter  diff ns/iter   diff %
 graph_map         569          323                  -246  -43.23%
 stable_graph_map  594          405                  -189  -31.82%
```
diff --git a/benches/stable_graph.rs b/benches/stable_graph.rs
index c6fa2cb..b981af3 100644
--- a/benches/stable_graph.rs
+++ b/benches/stable_graph.rs
@@ -176,3 +176,17 @@
     gr
 }
 
+
+#[bench]
+fn stable_graph_map(bench: &mut Bencher)
+{
+    let a = parse_stable_graph::<Directed>(BIGGER);
+    bench.iter(|| a.map(|i, _| i, |i, _| i));
+}
+
+#[bench]
+fn graph_map(bench: &mut Bencher)
+{
+    let a = parse_graph::<Directed>(BIGGER);
+    bench.iter(|| a.map(|i, _| i, |i, _| i));
+}
diff --git a/src/graph_impl/mod.rs b/src/graph_impl/mod.rs
index e52f6f7..9599e11 100644
--- a/src/graph_impl/mod.rs
+++ b/src/graph_impl/mod.rs
@@ -1264,19 +1264,17 @@
               G: FnMut(EdgeIndex<Ix>, &'a E) -> E2,
     {
         let mut g = Graph::with_capacity(self.node_count(), self.edge_count());
-        for (i, node) in enumerate(&self.nodes) {
-            g.nodes.push(Node {
+        g.nodes.extend(enumerate(&self.nodes).map(|(i, node)|
+            Node {
                 weight: node_map(NodeIndex::new(i), &node.weight),
                 next: node.next,
-            });
-        }
-        for (i, edge) in enumerate(&self.edges) {
-            g.edges.push(Edge {
+            }));
+        g.edges.extend(enumerate(&self.edges).map(|(i, edge)| 
+            Edge {
                 weight: edge_map(EdgeIndex::new(i), &edge.weight),
                 next: edge.next,
                 node: edge.node,
-            });
-        }
+            }));
         g
     }