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.
Make names more specific.

Names such as Address, Hash and Server are too generic. Rename them to
RouteAddress, RouteHash and RouteHashAndAddress respectively to reflect that
they are used only when calculating routing table.

Also add a comment which shows the format of RoutingAddress:
e.g., "127.0.0.1:8080"
Add an extractor for RouteAddress.

This patch introduces an extractor for RouteAddress which is handy for parsing
RouteAddress into IP and port. The extractor will be used later in management
console to gather list of workers.

Change the return type of BeyondConfiguration.currentServerAddress to
RouteAddress to make it explicit that it returns an instance of RouteAddress
that can be parsed with the extractor.
Rename currentServerAddress to currentServerRouteAddress.

Because currentServerAddress returns an instance of RouteAddress, it is
appropriate to rename it to currentServerRouteAddress.
Fix a typo.

NonHeapMemoryUsageReply -> NonHeapMemoryUsageRequest.