For convenience, a `Controller` class now exists from which all classes wanting to implement these methods should descend. This will allow sane cooperative multiple inheritance.
Classes don't have an `__name__` attribute, so when wrapping them in a `functools.partial` instance, don't try to copy it. Same goes for `__doc__`, but most objects should have that.
* Created a dispatcher protocol for classes to implement for path resolution
* Implemented a traversal dispatcher
* Updated the router to implement the dispatcher protocol
* Added unit tests for both dispatchers
* Replaced the Controller class with an Application class