Refactor service and aspect composition

* Replace context dependencies with responder
* Segregate responder interface from delivery (HTTP, Null) adapter interface
* Add helper methods to application for service composition

May consider using objects for lazy execution and composition of service
objects as these are easier to inspect on the console.
DRY up handling of missing parameters

Should this respond with 400 rather than 422?
Test and refactor missing parameter behaviour
Keyword args cause symbol/string flip flop

All keys are now symbols as soon as the HTTP (Sinatra) boudary is crossed.

Previously keeping "data" as string symbols seemed better but both Sequel and
keyword args rely on / provide symbols.

This is no longer poses a memory problem as the params are whitelisted before
their keys are cast into symbols
Add middleware to handle JSON requests

In order for sinatra to handle JSON requests properly by adding the body
to the params, we must use some middleware to parse JSON type requests.
This middleware is taken from the rack-contrib gem and should be
replaced by the gem in the future. Currently the latest stable release
does not contain this code and this is taken directly from master.
Merge pull request #23 from alphagov/bug/json-body-parsing

Add middleware to handle JSON requests
Merge pull request #22 from alphagov/service-composition-refactor

Service composition refactor
This is not Finder-Frontend
Architecture README notes
Merge pull request #26 from alphagov/architecture-docs

Architecture docs