Convert 'last' from non-blocking to blocking to match Rx.Net

Merging pull request https://github.com/Netflix/RxJava/pull/167 which needed manual merging.

Did some other cleanup while in there and added a missing generic 'Object' override.

Thank you @mairbek for doing this work.