Rename UserActionRequest to RequestWithUsername.

UserActionRequest simply adds username field to the given request using
WrappedRequest. So RequestWithUsername is a better name here.

Play manual uses the same naming convention:
http://www.playframework.com/documentation/2.2.x/ScalaActionsComposition
Add data to .gitignore.

data is used by MongoDB to store databases.
Use -> when creating a tuple.
Change the database name from "admin" to "beyond".

Change the database name to "beyond" because "admin" is the MongoDB reserved
database name used for authentication.

In addition, organize collections using namedspaced subcollections separated by
the . character. Changed "password" collection to "admin.password". This is the
naming convention used by MongoDB.
Add the development version of jQuery 1.9.0.
Add Rhino to SBT library dependencies.
Add Plugin controller to handle all requests coming to /plugin/*path.
Change the check level of NullCheck from error to warning.

We can't avoid using null when calling Java methods expecting null as a valid
value.
Implement a simple plugin system for game logic.

GameLogic allows Beyond users to write game logics in JavaScript. It accepts an
incoming request to the plugin path and returns a response.

This is a proof-of-concept implementation, so plugin path and scripts are all
hardcoded. Also there is no way to register a plugin. More patches will follow.
Move GamePlugin traits, classes and objects to beyond.plugin package.
Turn off JavaPrimitiveWrap.

By default, Rhino wraps results of Java method into instances of String,
Number, Boolean and Character. Thus scripts can access any Java method
available in these objects. But this is annoying in most cases.

Turn this behavior off and make these instances available directly as
JavaScript primitivie type by calling setJavaPrimitiveWrap(false) in
BeyondWrapFactory. Also override ContextFactory.onContextCreated to use
BeyondContextFactory.
Make JavaScript features configurable.

Change the constructor of BeyondContextFactory to take a list of features and
override ContextFactory.hasFeature to enable these features.
Use org.mozilla.javascript.tools.shell.Global.

Use Global as our global scope instead of calling initStandardObjects() by
ourselves. This is temporary because eventually we want to define our own
gloabl scope class by extending org.mozilla.javascript.TopLevel.

Also use the loan pattern provided ContextFactory.call(ContextAction). This is
safer because we don't need to call contextFactory.enterContext() and
Context.exit() manually.
Isolate the execution of a plugin into a ModuleScope.

Create a new ModuleScope for each game plugin. This prevents pollutions of the
global scope.
Compile and execute the script instead of evaluting it.

We can cache compiled scripts for faster execution later.
Move global initialization code to GamePlugin object initializer.

Global initialization needs to be done only once. Move it to GamePlugin object
initializer. Then, there is no need to check global.isInitialized before
global.init(contextFactory) because it is guaranteed to be called only once.
Add ZooKeeper to SBT library dependencies.
Launch ZooKeeper server on play startup.

Also add a sample ZooKeeper configuration file: zoo.cfg.
Launch ZooKeeper server through an Actor.

- Change ZooKeeperLauncher to an Actor.
- Add two commands: Launch and Shutdown.
Move import of play.api.Play.current to where it is used.

Because play.api.Play.current is used as implicit, it is better to minimize the
scope.