Memory optimizations for Observable subscriptions

Add a Dispatcher class to handle the dispatching of events to subscribed
observers. Use this class in Observable to handle the dispatching. This
way there is just one subscription using the original subscribe. Such as
in the previous implementation, if an Observable is created from a DOM
event then for each Observer there is a event listener bound, but
currently there will be just one.