Make Future receive NoSuchElementException when the BlockingObservable is empty

Now `Future.get` will return `null` if there is a single `null` in the BlockingObservable, or it is empty. People cannot distinguish between these two cases.

This PR has 2 breaking changes:
* Throw an `NoSuchElementException` rather than returning `null` when the BlockingObservable is empty.
* Change the exception from `IllegalStateException` to `IllegalArgumentException` when the BlockingObservable emits more than one items. This is because I used `single` directly.