Refactor and improve code quality

* [x] Handle errors with `httputil.HTTPError`
* [x] Put `handler` package in `handler/v1`
* [x] Just use negroni for middleware
* [x] Create a context variable that's used for passing request-state throughout different parts of the application