Create a system to control and access registers

Implementations of MIPS registers are derived from the `IRegister` interface.
An array of these registers is held in a `RegisterFile` object.

Load-Store processors require that work is done on data within registers. Data
is loaded from memory into registers and then written back to memory if needed.
A register file is a collection of registers. The classes authored are designed
to imitate the 32 registers used by MIPS.

Because each type of register has a different job, independently deriving types
allows for easier control over certain operations for each register.