Simplify backend classes

Changes in this commit are intended to simplify the backend storage
class.

- Reduce the number of storage class methods that need to be overridden.
  Now only `record` must be defined. During sampling, `setup` and
  `close` are also called, so the object should have these methods, but
  they do not need to do anything.

- Sampling returns the storage object's `trace` attribute. In all the
  backends provided, this is a base.Trace object inherited to define
  value access methods specific to that backend.

- As long as the methods above are defined, the storage object will
  work. This gives more flexibility to implement the backend storage
  class, so long as the `record` method properly stores the values.
  However, the setup in backends.base.Backend.__init__ should be useful
  to most backends (because of access to model information).

- The load functions have been modified so that they only work if a
  model is supplied or if within model context, which removes the option
  to load the values but not connect to the model.

- The base Trace object still provides a lot of structure. This is meant
  to help create a child Trace object for a backend that behaves the
  same as Traces from other backends. This means that the user can
  select values in the same way regardless of the backend. However, it
  is still possible for the user to create a very different Trace
  backend (assigned to the sampling objects trace attribute), as long as
  it has a `merge_chains` method to combine the results from parallel
  sampling.