Create only one CuratorFramework.

CuratorFramework instances are fully threadsafe, so it is recommended to share
one CuratorFramework per ZooKeeper cluster.

Create CuratorSupervisor to manage the lifecycle of a CuratorFramework instance
and pass it to other actors upon creation.
Fix a typo.
Remove unnecessary import.
Extract UserActionActor to a seperate file.

Currently, UserActionActor and UserAction are in UserAction.scala. This patch
extracts UserActionActor to UserActionActor.scala.
Add UserActionSupervisor.

Introduce UserActionSupervisor and make it supervise all UserActionActors. It
keeps the routing table and passes it to UserActionActors.
Make UserActionActor retrieve the routing table from UserActionSupervisor upon restart.

Currently, once UserActionActor is restarted, UserActionActor has a invalid
routing table until RoutingTableWorker notifies. This patch makes
UserActionActor request the routing table to UserActionSupervisor when it
restarts.
Make routingTable private.
Extract PathChildrenCacheActor from RoutingTableLeader.

This is a refactoring patch to reuse PathChildrenCacheActor.
Remove unused import.
Send UpdateRoutingTable message directly to UserActionSupervisor.

RoutingTableWorker's parent is no longer BeyondSupervisor, so it is incorrect
to send UpdateRoutingTable to its parent. Also there is no need to go through
BeyondSupervisor because BeyondSupervisors simply forwards the message to
UserActionSupervisor.
Split RoutingTableWorker into WorkerRegistrationActor and RoutingTableUpdateActor.

RoutingTableUpdateActor performs two independent tasks: worker registration and
routing table update. Split RoutingTableWorker into two actors and make each actor
perform only one task.
Make LeaderSelector a field.

curatorResources is no longer needed because the LeaderSelector instance is
available as a field and we can close it directly in postStop().
Rename routing table actors appropriately.

Currently, the names of routing table actors are confusing because we use
'update' with different meanings in different contexts. Use names from the
perspective of ZooKeeper so that update menas znode update and watch means
znode watch.
Remove unnecessary try/catch block.

cache.getListenable.addListener(this) never throws an exception.