Output Operations

Allows output operations (Keyboard, Mouse etc.) to be derived from a set of standardized base classes which structure the way in which each of these operations behaves and ensures that future additions to output forms (sound, scripts etc.) will not require modifications to other aspects of the application.

This branch implements the required abstract classes, keyboard and mouse input implementations and a number of helper methods. The previous implementation of `DirectInputEmulator` has been entirely replaced and all code making use of it migrated to the new format.

All included output operations include support for serialization through .NET's `BinaryFormatter` and *may* support serialization to XML using the `System.Xml.Serialization` namespace.