Add NetworkController and all related Events.

Pretty big PR, and I had to make a few small changes to the design to get everything to work, so I'm going to tag everyone so that you're all at least aware of what's going on:

- The biggie is that it turns out `java.awt.event.KeyEvent` does *not* implement Serializable, nor does it have a 0 argument constructor, so child classes cannot take on that role either. This means that we cannot subclass this as we had originally intended. Instead, I have created a `SerializableKeyEvent` class which can take a `KeyEvent` as a constructor argument, then after being sent over the network, we can recover an actual KeyEvent again by calling `serializableKeyEvent.toKeyEvent()`.

- I've had to add `implements Serializable` to the `Grid` and `Entity` classes (related to @oharaandrew314 comment on #13).

- I've had to change our Event interface into an abstract class so that it can implement `Serializable` (I could be wrong on this, but I don't think interfaces and extend/implement other interfaces??)


@oharaandrew314 @DPenner @DDionne