> What is the difference that we're trying to draw between a Trace and a
> Backend? It looks to me like Trace and Backend should be the same
> class. The object that is responsible for storing the points should
> also be responsible for retrieving them.

In an earlier version, I experimented with using one class, and we could
move that way again, but there are a few reasons I think two classes are
a good idea.

- It makes the trace interface more consistent and less cluttered for
  users. By returning a separate trace object for retrieval, users have
  an object with methods that only concern what they'll be using it for
  (selecting and viewing values). They don't deal with the storage
  object directly (`sample` does).

- I think having separate classes for storage versus retrieval makes it
  clearer when defining custom backends which methods should be
  overridden for each class. For a working backend, only the `record`
  method of the storage backend must be defined. The trace class just
  provides a way to make the custom backend have a consistent interface
  for accessing values.

- If put in one class, it's pretty large, so dividing the
  responsibilities between storing and retrieving values seemed like a
  natural division.