Refactor Flask app wrapper

Soon this will not just wrap Flask apps representing APIs.
- Allow `SplinterClient` to accept app name and port (so that a splinter
  client can be started for the admin app)
- Rename `Api` to `FlaskApp` throughout
Add minimal admin app

Just add a homepage and allow the app to be started in the same way as
the read and write apis are.

Includes a refactor of the `start.py` script.
Add configuration to admin app
Refactor logging and set up for admin app

- Set the Flask app name correctly for each app
- Use the Flask app name when setting up logging
- Add logging support to admin app
Remove Signonotron2's dependence on flask

The Signonotron2 class doesn't need to depend on flask and it doing so
has the depdency going in the wrong direction.
Add sign in feature to admin app

This includes:
- Copy static assets and templates from the write api
- Add authentication related views
- Add final homepage view

This commit introduces a *lot* of duplication between the write api and
the admin app. The write api is being left as it is until this is merged
to avoid tying the backdrop release to a release of `pp-deployment`.
Fix indentation
Refactor UploadedFile to not save

Make `UploadedFile` concerned with loading and uploaded file and parsing
it. It then returns a list of dictionaries that can be passed to save.
Add after scenario handlers

Allow behave steps to add functions to be run after the scenario is
complete. This can be used for cleaning up resources.
Move steps around and mark those to delete

- Move file upload related steps to the admin module
- Create an login step in the admin module
- Mark write api login steps as to be deleted (will be deleted once
  uploading is removed from the write api)
Refactor `UploadedFile`

- Rename `FileUploadException` to `FileUploadError` as it's not
  exceptional, it's just an error.
- Handle virus scan failures in the same way as any other failure (raise
  a `FileUploadError`)
- Move saving and removing temporary file into `UploadedFile` -- it is
  directly related to `UploadedFile`'s validation responsibilies
- Move parsing and saving out of `UploadedFile` -- `UploadedFile` should
  only be concerned with validating the uploaded file.
Implement storing uploaded files in `admin` app
Implement remaining feature tests on `admin` app
Change `UploadedFile` tests to mock virus checking
Skip virus scanning on travis

We don't install clamscan on travis because the install takes too long.
Re-enable splinter tests

It may be that they were failing due to clamscan not being available.
Remove flag to enable single sign on
Add more detailed error handler
Merge pull request #209 from alphagov/separate-admin-app

Separate admin app