Handle address overflow in findMatchingRegion()

Previously attempting a read/write from 0xFFFFFFFC would match any
region since (address + size) == 0.  I added a few unit tests to
MemorySimTest.cpp to expose this and related overflow issues.
Test HardFault created by busExceptions

Should have similar results as hard faults caused by unaligned
accesses.