Edge

I made sweeping changes incorporating a new interface that treats edges as a more important part of the graph.

Changelog:

1. New Graph, DirectedGraph, and Mutable interface (see graph.go for details)
2. Renamed concrete.GonumGraph, concrete.GonumNode, and concrete.GonumEdge to concrete.Graph concrete.Node and concrete.Edge
3. Moved search.WeightedEdge to the concrete package; concrete.Graph now uses a WeightedEdge internally to keep track of edges passed in
4. MutableGraphs are now required to keep track of user-provided edges
5. CostFunc now takes an Edge rather than a pair of nodes
6. A new function type called HeuristicCostFunc was defined that has the old CostFunc signature, this is because there is not necessarily an edge between two nodes you want the heuristic distance between
7. Fixed EdgeList in concrete.Graph to only return undirected edges.
8. The setupFuncs methods now returns EdgeTo and EdgeBetween in addition to the other functions
9. IsSuccessor, IsPredecessor, and IsNeighbor are now closures generated in setupFuncs that wrap a conditional check around EdgeTo and EdgeBetween
10. The MutableGraph interface now has clearer documentation -- no more undefined behavior and methods no longer have calling order requirements, meaning you can add an edge without adding the head node first, etc.
11. Removed a bajillion lines of code due to the new interfaces being much better (According to the PR, I actually managed to remove about 180 lines more than I added, though about 100 of those were the coverage tests)
12. Removed several unexported functions from TileGraph since they were pointless.
13. Changed most of the existence checks in concrete.Graph to check nodeMap rather than successorMap -- they're functionally equivalent but checking nodeMap makes way more sense.
14. Removed all the tests that did nothing but generated coverage.
15. Removed Degree from the Graph interface. It was never used internally and it was too confusing whether or not it should have Undirected or Directed behavior.