Write Raw Input classes.

When Windows sends us a message, we want to translate that over a "Raw Input" object that we can pass around easily.

Because this input can come from several sources, we want to use an interface to identify the type, and then subclass into the details of it.

The reason for having something like this is because we do not want to deal with device-agnostic inputs in certain situations, like typing on a keyboard to send a message or displaying a cursor to navigate the screens.

In these cases, we want direct access to the source of the input.

Subclasses Required:

  1. Keyboard Input - an array of buttons that have had their state changed.
  2. Mouse Input - position, left, right and middle mouse button states.