Data de-duplication

This is a first pass at solving the data duplication issue with sending multiple copies of the same state to the same sink from different subscribers.  

Major changes:
 * subscribe API -- Still looking in to making this a little more polished, but for now I changed changed the fn to take 2 args, selector and sink as well as three optional keyword args `:transform`, `:filter`, and `:sample-freq`.  In addition, all subscriptions will use core.async/chan rather than using the optional map> and filter> channel abstractions as they are no longer needed. 

* Routing -- transforms, filters, and samples will be evaluated via the async routing channel, allowing us to compare values per sink and eliminate duplicates bound for the same sink in a non-blocking manner. 

suggestions welcome.