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.
No need to clutter the docs with `immutable.` prefixes ;-) Unless otherwise stated, everyone will assume it's immutable.