Add LauncherSupervisor to monitor the lifecycle of launchers.

LauncherSupervisor creates two child actors and monitor them.
- mongoDBLauncher
- zooKeeperLauncher
Wait for ZooKeeper server startup and shutdown.

Make ZooKeeperLauncher wait for server startup and shutdown by sending "stat"
command and check if the server responds.
Redirect to the index page if a user is already logged in.
Add logout page and logout button on header.
Create MongoDB data directory if it does not exist.
Introduce BeyondSupervisor.

BeyondSupervisor is our new root actor which supervises all actors that are
created by Beyond. For now, it has two children: LauncherSupervisor and
UserActionActor.
Make ZooKeeperLauncher use PinnedDispatcher.

ZooKeeperLauncher needs a dedicated thread because it synchronously waits for
server startup and shutdown.
Check if ZooKeeper server is healthy by sending a heartbeat message.

If ZooKeeper server does not respond within 30 seconds, ZooKeeperLauncher
throws a ServerNotResponding exception. Then, LauncherSupervisor restarts
ZooKeeperLauncher.
Use Thread.join() to wait for ZooKeeperThread termination.
Remove ZooKeeperThread.

ZooKeeperThread introduces a level of indirection with little additional value.
Use plain Thread instead.
Exclude slf4j-log4j12 dependency.

SLF4J binds only one underlying framework at a time. Currently, we have two
bindings: logback-classic and slf4j-log4j12. Exclude slf4j-log4j12 dependency
so that we have only one binding.

This patch removes the following log:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/kseo/tools/play-2.2.2/repository/local/ch.qos.logback/logback-classic/1.0.13/jars/logback-classic.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/kseo/tools/play-2.2.2/framework/../repository/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

The following link explains how to exclude transitive dependencies:
http://www.scala-sbt.org/0.13.1/docs/Detailed-Topics/Library-Management.html#automatic-dependency-management
Log ZooKeeper startup and shutdown.
Add logback configuration file for customization.

This is the default configuration file used by Play:
http://www.playframework.com/documentation/2.2.x/SettingsLogger
Make Akka use Slf4jLogger for logging.

The default logging system of Play is also Slf4jLogger. Use the same logging
system in Akka for the ease of management.
Show Akka config settings on startup.

This is helpful when diagnosing a Akka related problem.
Add scala-logging to SBT library dependencies.

SLF4J-backed implementation will be used for logging.
https://github.com/typesafehub/scala-logging
Read MongoDB database path from application.conf.

beyond.mongodb.dbpath key is used.
Throw LauncherInitializationException if no mongod binary is found.

This will stop MongoDBLauncher actor.
Log MongoDB startup and shutdown.
Set SingleConsumerOnlyUnboundedMailbox as default Akka mailbox.

SingleConsumerOnlyUnboundedMailbox is more efficient than the default mailbox,
UnboundedMailbox backed by java.util.concurrent.ConcurrentLinkedQueue. It is
okay to use SingleConsumerOnlyUnboundedMailbox because we don't use a
BalancingDispatcher.

See "Default Mailbox" section of
http://doc.akka.io/docs/akka/2.2.1/scala/mailboxes.html