Moved I/O device port allocations into device classes with a .getIOPorts() method

- Allows devices to more easily control their own setup, eg. with configurable I/O ports
- Cleaner, keeps SystemFactory simpler
Cleaned up constructor
Simplified legacy<->wrapper CPU class
Moved legacy Memory init call to wrapper .init() method to match new API
Implemented missing DAA instruction
Updated System.reset(...) to accept type (software or hardware)
Updated Register class to support auto-creation of parent buffer
Added experimental NE2K model for loopback networking

- Supports ARP and ICMP Echo Request/Reply
Fixed failing test
Added missing A20 address line handling