Install require and load GamePlugin scripts from the file system.

- Install require() function in global scope using Global.installRequire
  method.
- Load GamePlugin scripts through require.requireMain method from the directory
  specified by beyond.plugin.path in application.conf.
- Make GamePlugin export its handler function through exports object.
Replace Global with BeyondGlobal.

- org.mozilla.javascript.tools.shell.Global is too powerful for our purposes.
  Create our own Global which provides only defineClass and seal functions.
  These two functions will be used to implement Beyond JS modules.
- Extract implicit conversion functions into RhinoConversions.
Use ContextFactory.call instead of ContextFactory.enterContext/Context.exit.

It is easy to forget to call Context.exit in finally. Use the loan pattern
provided by ContextFactory.call.
Remove 'result' binding to store an intermediate result in GamePluginImpl.handle.
Setup ReactiveMongo Play plugin.

- Add ReactiveMongo plugin to SBT library dependencies.
- Add ReactiveMongo plugin to conf/play.plugins.
- Add MongoDB server list and DB name to conf/application.conf.
Use MognoReactive Play plugin.

- Get rid of MongoDB connection setup in Global because it is automatically
  handled by MognoReactive Play plugin.
- Refactor Admin with MongoController and JSONCollection.
Introduce AdminUser model with Json.format.

Json.format provides an implicit conversion from JsObject to a model class.
Rename LoginData to AdminUser and use it to retrive admin users from DB.
Eta reduction.
Omit parens in Runtime.getRuntime().

Methods hat follow JavaBean naming contract for accessors are expected to have
no side effects. The recommended convention is to use a parameterless method
whenever there are no parameters and the method have no side effect.
Reimplement ZooKeeper "stat" command with akka.io.

- Instead of using FourLetterWordMain.send4LetterWord which is blocking,
  implement non-blocking "stat" command with raw akka.io.Tcp.
- Adjust timeout and delay values: 30 seconds for server not responding
  timeout, 10 seconds for initial delay, 5 seconds for retry delay.
- Remove PinnedDispatcher from ZooKeeperLauncher because our new implementation
  is fully asynchronous.
Use the singular form of time unit for one second.

scala.concurrent.duration.DurationConversions trait provides both singular and
plural form of each time unit. Use second instead of seconds for 1 second.
Add MutableRoutingTable and RoutingTableView.

These two class are to manage consistent hash used by Game Server for
load balancing.

MutableRoutingTable will be used by one elected leader to update routing
table.

RoutingTableView will be used by all workers to sync routing table.
Each server handles range in (hash of previous server, hash of current
server]. If requested hash is in range, queryServerToHandle method
returns HandleHere. Otherwise returns RedirectTo(address)

MutableRoutingTable and RoutingTableView has hash to address information
as immutable TreeMap.

RoutingTableView has volatile variable, to ensure visibility between
threads. But MutableRoutingTable is not immutable, becuase it is used by
one thread.

And this patch add test cases for RoutingTableView.
Add CuratorConnection.

CuratorConnection inherits Closeable, to have the same interface with
object in Curator.
Implement RoutingTableWorker

Worker uses Curator to sync consistent hashing routing table.

Worker creates sequential ephemeral node at `workers-path' with
protection mode when it starts. Protection mode add prefix with client
id to ensure that node is created.

Worker watchs `routing-table-path' and updates RoutingTable when
`routing-table-path' node is changed.

`workers-path' and `routing-table-path' is in application.conf.
Add route.Leader.

This class is to manipulate routing table. Curator LeaderSelector
ensures only one leader works.

If Leader takes leadership, it monitors `workers-path' and
updates router table when worker is added or removed.