Higher-performance route matching

I've modified the ```request()``` and ```dispatch``` functions to categorize routes by method. So instead of searching through every route on a GET request, for example, the matcher only has to search through the ```GET: [...]``` handlers.

So routes is now an object instead of an array.