Converted server tests to Scala.

Why torture oneself with Java if it can be avoided?
Added mechanism for maintaining a global map (mirrored across all nodes).

In general, these are not something a game should need. 99% of a game's needs
should be met by singleton and keyed entities and NexusObjects. Only in rare
circumstances should a globally shared map be necessary. Under the hood, Nexus
will use a globally shared map (or something almost exactly like it) to track
which entities are hosted on which server.

The motivating case for making this API public is a need to keep a global
mapping from client id (which is the key for the client keyed entity) to client
username, so that a chat message can be routed directly to the appropriate
client entity based on username. This may well be the only thing these maps are
ever used for.

The actual "mirror across nodes" part is not yet implemented (since multiple
nodes are not yet implemented), but all the wiring is in place to hook it up
when they are (which will be next!).

The general idea is thus:

When every node starts up, it registers all the maps it needs, and during the
"connect to the network" process, the current contents of all of those maps are
downloaded from some peer.

Whenever a change is made to a map on any node, the change is sent to the peer
manager, which puts it on a list of pending map changes. It also immediately
notifies any local map listeners (global maps are reactive).

Every 500ms, a node batches up all of the pending map changes and ships them
out to all other peers in the network. Those peers apply the changes to their
local maps, which will notify local map listeners on that node. So other nodes
"see" changes to a global map 500ms (+network delay) after the originating node
makes them.