Fixes bug 1096552 create dataservice

This is a portion of work done in this branch: https://github.com/twobraids/socorro/compare/simple-middle

The idea was to make this more easily reviewable than the earlier, more comprehensive patch.

This patch implements: 

* DataserviceApp - a refactoring of MiddlewareApp to be simpler and to operate more like crontabber -- using our `socoro/external` class interfaces for accessing data, rather than a custom interface.
* Bugs - an implementation of a dataservice that demonstrates the future of how we provide data through Dataservices API in the future
* tests - I didn't remove all of the tests that were implemented for the future dataservice implementations. I just marked them as skipped for now.

There's some additional work that was done in the `socorro/external/postgresql` classes that I may end up taking out as I do another review. 

This is all really @twobraids' work, with me renaming the refactored code to 'dataservice' and some cleanup work to make it possible to run both the middleware_app.py and dataservice_app.py at the same time. 

Once we've settled on this code, we can add the rest of the services in another PR and the finally work on making these classes accessible in the Django app.
This has bothered me for a while but I've never fixed it. Perhaps now's a good time. 

If you get a `400 {"error": {"message": "somefield"}}` how are you supposed to know what's wrong with it. Is it missing or is it just a bad/invalid value?

Let's simply change this to:
```python
try:
    result = method(**params)
except (MissingArgumentError, BadArgumentError) as msg:
    raise BadRequest({
        'error': {
            'message': str(msg)
        },
        'type': msg.__class__.__name__
    })
```