Replace @web.api with HALInterface class

Instead of maintaining global state for the set of classes and methods
exposed via the HAL API, require code using this module to instead
create an object in which these are maintained. Previously called api,
this is now known as HALInstance.

An example use case is as follows:

    hali = HALInterface()

    @hali.api(...)
    class SomeClass:

        @hali.action(...)
        def someAction(self):

The main reason for using object instances instaed of global state is to
provide separation between different tests executed sequentially in the
same process. Each test can create its own HALInterface object and add
class and action annotations to that, and be assured that there will be
no interference from those used in previously-executed tests. With the
old mechanism, the definition.registry dictionary would remain unchanged
between tests unless it was explicitly cleared, but it's private state
that we don't want code outside the module accessing.

A separate registry of class definitions is now maintained by each
HALInterface object, i.e. one per test. The definition class no longer
has any class-level/global state, and instead has only instance fields.