Implemented 'Synchronize' with 'lock'

Hi,

I implemented #84 to support that sending a lock to the `synchronize` operator.

I also found that there was a issue that `testMultiThreadedWithNPE` and `testMultiThreadedWithNPEinMiddle` may fail in some special situation. When `onError` is invoked before any `onNext`, the last statement `assertEquals(1, busyObserver.maxConcurrentThreads.get());` in these methods will fail. I also fixed this issue in the pull request.