refactor dispatch

Refactor the dispatcher so that it doesn't depend on Aspen's request, response and website objects. I want to be able to use the dispatcher inside of Django.

Builds on #385/#386.