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.
And while I'm reading this, I wonder why we don't swap the order of the type params:
```scala
o.to[HashMap, Char, String](keySelector, valueSelector)
```
corresponds better to the order of pronouncing what we're doing: we say "convert o to a HashMap of Char/String".