Multi-link topology support

Here is a slightly different approach to supporting multiple links. I've tried to:

 * Make `Node.MultiGraph` more compatible/isomorphic with `networkx.MultiGraph`
 * Ensure that nodes (`node1`) and their parameters (`cls1`) are matched correctly when the link constructor is called
 * Add a `convertTo` method to ease converting `Node.MultiGraph` to `networkx.MultiGraph` (you can also just override `Topo.build()` with `g = networkx.MultiGraph()`

However, there are still a bunch of things I'm not entirely happy with:

 * The port management scheme is clunky
 * To preserve the old clunky API, `Topo.port` returns a single tuple if there is only one port and multiple tuples if there are multiple ports
 * I'm not sure if Cody's space/time tradeoff is better than my time/space tradeoff in the clunky port management code
 * However, since `Topo.links()` can return the link information, we don't actually call `Topo.ports()` any more.
 * The polymorphic parameter list of `Mininet.addLink()` is more convenient now (you can pass in names or nodes, as well as a dict or in-line parameters), but also more clunky (since the node specifier is already in the parameter list, it's redundant to have it as a parameter); supporting this is a bunch of ugly lines of python.

Although they may not belong in this patch, there are some additional things I'd like to have, including:

* A nice way to plot topologies with multiple links. Right now, you can use
  `nx.write_dot( topo.g.convertTo( nx.MultiGraph ), 'multigraph.dot' )`
  to write out a `.dot` file, which can then be plotted using various methods. Unfortunately
  `MultiGraph.draw()` doesn't do a good job of drawing multiple links.






could these MACs be passed as params?