Added an immense amount with this update, and it's looking more and more
like a MUD all the time. I added some place-holder commands via the
CommandParser. For now it's limited to "who," "look," cardinal direction
movement, and quitting ("quit"). I also fixed the input processing event so
that now it passes each line of input to the command eventin the event that
multiple commands are sent in one receive() call. It's kinda tacky, but
it'll do for now.

I added "message modes," which is a concept I hope to flesh out later. The
basic idea is that, when you send a message, a category is tied to it. To
avoid spam and promote readability, messages from a different category are
separated by a line break. Messages from the same category are send in
succession with no break between them.

To avoid empty lines after a command echo (which the game assumes there
always is one right now), the player's message mode is "cleared," which
tells the game not to print a linebreak when the next message is sent.

Movement is in, like I said earlier. I added a Direction package that
contains some simple directional operations. Mostly it supplies the enums,
but also handles converting a direction into a string value, and also
handles "reversing" a direction, which should be useful.

MapObjects have several ways of locomotion. The essential function is
MapObject:setLoc(), which sets our location without any handshaking. Then
there's MapObject:move(), which respects the target MapObject we are trying
to enter's MapObject:permitEntrance() function -- if it returns false, then
we can't enter. And finally, for things capable of stepping (all MapObjects,
but not really), there is MapObject:step(), which accepts a direction, and
attempt to move in that direction.

That about sums it up for this update. Something of note is that, most
interactions should take place on the Mob or other MapObjects. The Player
object is dedicated merely to holding Player-unique data, and processing the
lower level user-only operations. This is why things like showRoom() are
part of the mob, not the Player. Mobs occupy rooms, not Players. Plus, since
most operations occur on the mob anyway, it provides easier access to put
most of these operations on the Mob instead and then just pass them along to
the Player.

This needs to be fleshed out a bit more though.