Separate load balancing out of CachingRegistry

Load balancing has been separated out of CachingRegistry and has been
reworked into a general filtering mechanism that provides
pass-through, random, and round-robin filter implementations. These
filters are used both for routing events to consumers during
dispatching and for choosing a dispatcher in an Environment where
multiple dispatchers exist with the same name.

Closes #26
Merge branch 'load-balancing'