Fix ObserveOn, NewThreadScheduler and ScheduledObserver bugs

@headinthebox and I were working on some code and found differences in behavior between Rx.Net and RxJava with observeOn. This commit should fix that.
Parallel Operator

This operator came out of discussions and work with @headinthebox to allow explicit and composable declaration of blocks of work that can be scheduled for parallel execution.

An Observable event stream will be sharded using groupBy using a value from Scheduler. degreeOfParallelism() (defaulting to number of CPU cores) and perform the defined work in parallel.

Instead of having various parallel operators like parallelMap, parallelFilter parallelScan etc this can work generically for any operators or sequence of operators.
Making Observable.synchronize an instance method rather than static
Reorg fields
Merge pull request #393 from benjchristensen/parallel-operator

Parallel Operator & ObserveOn/ScheduledObserver Fixes