Implements stage deployement and cleans up other stage code; adds tests

Logging and error handling are an automatic part of the code base. As of this pull request, this was done through the magic of the page decorator. #20 implements this in middleware. Basically, there is a set of exceptions defined in ab_testing_tool_app/exceptions.py which, if raised, are logged and rendered with a particular error status. This allows the elimination of lots of common error handling logic and means it is far easier to test for error handling, through the test suite's assert_error function.