Functional edge computation

This allows algorithms that need edge weights, lengths, flows, etc. to take an inspector object that will "compute" them as needed.  Allows flexibility at low cost (julia's optimizer does all the work).