First step in convertion to non-global state.

- A base Klein app that handles setting the content-type to
  'application/json' for all responses, and holding a store reference,
  has been added in `otter/rest/base.py`.
- Routes for /v1.0/<tenantId>/group have been collected into OtterGroup,
  while routes for /v1.0/<tenantId>/group/<groupId>/ have been collected
  into OtterGroupActions.
- Utility functions that were originally in `otter/rest/application.py`
  have been moved to `otter/util/http.py` as they were already using
  functions from there and are related to web requests.
Removed extra Klein app for OtterGroups.

This is more explicit and make organization of endpoints easier.
Rename OtterGroup to OtterGroups.

This is more consistent as the root endpoint for groups is /groups, not
/group.
Convert config and launch to non-global Klein app.

Splitting them up into seperate apps seemed like the logical thing to
do, as there would not be a clean way of instantiating a single object
to handle both routes.
Linting.
Change BaseApp to not instatiate Klein app.

This fixes linting, and makes the fact that each object is a Klein app
more explicit.
Convert Policies to non-global Klein app.
Fix typo in calling 'app.routes', not 'app.route'.
Create the OtterExecute Klein app.

This app handles the single route /execute/<cap...version>/<cap...hash>.
Convert Webhooks to Klein app.
Linting.
Change decorators to work with methods.

Also update tests to use example object.
Setup TAP to instantiate Otter Klein app.
Remove global state from Scheduler.

The scheduler is now initialized with the backend store to use.
Fix typo in setHeader for root route.
Make sure all requests default to application/json
Disable strict_slashes for the main application
Fix patching for 'get_url_root'
Fix tests in tap/test_api.py.

Since 'set_store' has been removed, any reference to it is no longer
valid. These tests have been changed to expect a non-global state Klein
app with a backend store passed in.
Add root argument to assert_status_code.

This sets the default of root to be a reference to the Otter application
with an iMocked store. RequestTextMixin now has a method `mock_app` that
returns this reference. Tests for the application have been fixed to
work correctly.