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 don't quite like these two examples because none of them shows explicitly what's happening. I'd only make one example, but add all types there:
```scala
    val m: Observable[HashMap[Char, String]] = o.to[Char, String, HashMap](keySelector, valueSelector)
```
IMHO that's more readable.