Don't use HALInterface outside of HALApplication

Instead of having code using the hyperdns-flask library create its own
instance of HALInterface and calling methods on that to add api classes
and do instrumentation, expose this same functionality through
HALApplication instead. Thus, to define an API class you now do:

    @hal_app.api(docs=...)
    class SomeClass:

HALApplication how has a 'hali' attribute which refers to a HALInterface
object created in the __init__ method. The following methods/decorators
of HALInterface are exposed through HALApplication:

- api()
- action()
- analyze_route_map()
- instrument()