Workaround to better non-declarative counters

If a counter is instantiated non-declaratively (e.g., during initTask),
the options dictionary won't be configured in a way that can access it
by direct indexing.

We'll hack in a workaround for now:  If the object isn't directly
indexed in the counters dictionary, try to find the child with a name
specified by the first '.' partition, and get the counter from it.

This will work for counters that do not register child namespaces, but not
`sample()`-type counters, for example.
Add a new `Callback` counter to `sparts.counters`

Callback counters take a positional argument, `callback`, which is
invoked every time getvalue() is called.

This counter type can not (currently) be used declaratively, so you will
have to register it manually during initTask, e.g.:

  self.counters['my_counter'] = counters.Callback(lambda: len(self.items))
Add queue_depth Callback counter to QueueTask

Updated a unittest to confirm.

Fixes #50
Updated CHANGES.txt for recent changes