The problem here is that we basically want this to work like the logging API.  We don't want to have to pass around Tracker objects all over the place so we provide a "get_tracker" method that will get an existing tracker or create a new one for you and give you that one.  Because of this, we have to be able to mutate the set of backends on the tracker, so the usage looks like ->

foo_tracker = get_tracker('foo')
foo_tracker.add_backend(MyBackend())

foo_tracker.event('my event')

I suppose we could change it to something like this ->

foo_tracker = Tracker([MyBackend()])
track.add_tracker('foo', foo_tracker)

# much later in the code

track.get_tracker('foo').event('bar')  # this would get the tracker added above, or raise an Error if no such tracker was found.