Replace subscribe with exposed observable in ZOOM

Rather than the intermediary subject trick, which follows the standard
pattern in rx libraries and enables easier composition.

This patch also removes the thread that cleaned ZK connections from
observables that have no subscribers. This is first to eliminate the
complexity required to thread-safe the management of the various data
structures involved in keeping caches and gc candidates. Second, because
the goal of the code was to cancel a given observable's connections GC
if a subscriber arrived after we decided to GC it, but before we
actually got to do it. In practise once we expose the observable there is
no guarantee that we're able to do this, because a potential subscriber
may retrieve the observable while it's still active, and hold it until
well after the connection has been GC'd, in which case we have no way of
notifying it.

The approach proposed here changes this strategy. Whenever we detect
that the last subscriber is gone, we immediately close the connection.
The underlying ObservableNodeCache or ObservablePathChildrenCache will
signal this by emitting an onError on the Observable. In the situation
described above, any late subscriber will receive a notification
indicating that it needs to go back to ZOOM and request a new
Observable. Which can be done easily with the onError operators.

Change-Id: I7380be154294f45599d944437d1afb4589c0355a
Signed-off-by: Galo Navarro <galo@midokura.com>
Merge "Replace subscribe with exposed observable in ZOOM"