Use a builder for defining observable properties

``limivorous.observable()`` now returns a builder, instead of a
reference to ``limivorous``. Properties can be defined using the
builder without supplying the target & context redundantly.