Reimplement the 'single' operator

This PR did the following work:
* Reimplement the `single` operator
* Add `first`, `last`, `single` to rxjava-scala
* When the `Observable` is empty, `first`, `last`, `single` will throw `NoSuchElementException` instead of `IllegalArgumentException`. It's more consistent with the Java Collection API, e.g., [Deque.getFirst()](http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html#getFirst()), [Deque.getLast()](http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html#getLast()).