Memory Bus

Use a bus to connect various pieces of the emulator.
Each device implements a MemoryMap interface.
The bus handles sending reads/writes to the correct place.
Convert audio over to the new system.
Convert video over to the new system.
Convert controller over to the new system.
Add Two ram devices.
Add MBC1 implementation.

TODO:
Interrupts have no way to be triggered.
Clock is internal.
Timers are still implemented in the CPU.
Video is still implemented in the CPU.
Wire up CPU Interrupts

Expose the IF and IE registers via the CPU device.
Expose Interrupts via the MemoryBus.
Refactor timer into device.
Simulate a simple serial device.
Move video handling into a device.
Expose cycles/instruction.
Move the MemoryBus out of the CPU

Pull the MemoryBus out of the CPU.
Each device must exist on a MemoryBus.
Devices 'ticked' in order.  The CPU drives the number of cycles per tick.
Update the execution loop to call into the MemoryBus.
Refactor the unit tests, remove some debug only code from the CPU.
The boot room is currently disabled.
Refactor cpu.h into several headers

Remove unused base class Video
Remove SimpleMap Device

Replace high memory with a direct buffer.
Replace the serial device with skeleton.
Merge remote-tracking branch 'origin/master' into master