Refactor toMap

A PR to refactor `toMap`.

There is a breaking change in this PR: 
* Remove `def toMap[K, V] (keySelector: T => K, valueSelector: T => V, mapFactory: () => Map[K, V]): Observable[Map[K, V]]`

The other changes are still source compatible and binary compatible.
I'm not sure if we should have these `toXxxMap` methods. Now we just have `TreeMap` and `MutableMap`, but to cover all use cases, we would need many more. I'd find it nicer to have a light-weight way for users to specify the map type they want.
Maybe something like `myObservable.to[immutable.TreeMap]`, but probably we can't overload the `to` method like this...