Moving to an architecture where IMemoryBusDevice instances can service requests put on the memory bus.

add: IMemoryBusDevice
change: Timer, Rom are now IMemoryBusDevice

Still toying around with the details.
Break out serial output from MemoryBus and move it into GameLinkPort.

add: GameLinkPort device which handles serial transmissions
Start of LCD support.

add: Lcd with LY, STAT (very little testing done)
add: GameLinkPort::Reset

Probably going to move away from this approach where each device gets a turn to handle a request, it's too slow.
Add cartridge type detection, the first mapper, and a device for the unusable memory area.

add: RomOnlyMapper, instantiated based on cartridge type
add: FPS display
Add joypad embryo, MBC1 mapper.

add: Joypad - doesn't actually read input yet
add: MBC1 memory mapper
change: ignore STOP for now.  It seems tricky to detect when the game is trying to switch to CGB double-speed mode.
add: CPU tracing to in-memory string
Reimplement old opcodes using template format for consistency; add missing LDH.

add: missing LDH variants
change: use template-based opcode implementations everywhere
CPU now passes all Blargg's tests!

add: missing BIT, RES, SET opcodes
add: embryo of memory bus device index caching
Oops, missing unstaged changes.

change: just remove some comments
Activate rough memory bus caching scheme, boosts debug performance tremendously (back up to release speeds).

change: try to cache memory bus devices in the case where the first few big if's in the memory bus fall through.  If the cache fails, just defer to the old code.  Eventually this will be cleaned up and the caching will be required to pass, etc. but in the meantime the speed boost is much appreciated.
Move MMR and VRAM into LCD; add OAM.

add: Sound class, unused so far.