Change Path module to functor

This pull request changes the `Path` functor within `Topology` to be a functor, parameterized on the weight (and associated operations) used for each edge. The old `Path` module used baked-in unit weights.

Note: this will break code that uses the `Path` module. We added a new module `UnitPath` that provides the same functionality. We decided this change was worth making since there are only a few places where `Path` is being used. However, it will need to be merged carefully, and possibly with a coordinated way with other repositories.

Chris & Nate