Improve speed of A* routing step on big problem instances.

Rather than checking the entire PENDING list to see if we have
encountered a node before, we now have the vertices keep a list of
pointers to their own pending nodes in the search.  Thus we can now do
this check in almost constant time.  This happens very frequently in the
inner loop of the search and speeds up the routing on large examples
by nearly 2X.
Cleanup A* search to remove unnecessary DONE vector.
Better cheap estimate for crossing penalty rerouting.

This is a better estimate for rerouting that happens with crossing
and/or shared path penalties.  We want to leave the simplest shortest of
the interacting connector group and reroute the others around this.
This estimate uses the overall connector length minus it's shortest
segment length.
Vastly reduce the amount of work done during orthogonal routing.

This changes improves and fixes errors in the cost estimation used
during A* search for orthgonal routes.  This causes most paths to be
found by exploring less of rhe search space than before.  This greatly
speeds up orhtogonal routing, especially on large examples.