Add warnings in ARMv7M interrupt and exception handling.

Operating system kernels should obey certain protocols during
interrupt and exception handling to ensure that undefined
behaviour does not occur.

To assist kernel developers, a message is printed when the
virtual CPU is placed in an undefined state.
Refactor ARMv7M bitband code in to dedicated file.

Currently the armv7m.c contains code for both ARMv7M
initialisation, as well as the implementation of the special
bitband device driver.

To improve module cohesian the bitband driver is split in to a
dedicated module.
Allow ARMv7M devices to run without a kernel specified.

Embedded deviecs are often used in conjunction with gdb.
In these cases, gdb is used to load the image, so it is not
necessary for QEMU to load the image via the -kernel option.
Load SP/PC directly from physical memory on ARMv7M.

Previously the SP/PC was loaded indirectly from any registered
ROMs. This is not ideal as the flash may be modified at runtime
by either the application or a debugger, and on a reset the
updated SP/PC should be used.

To enable this to work correctly the CPU must be initialised after
memory has been initialised in the system (otherwise the CPU
is unable to read from memory, causing a segfault.)
Ensure ROM reset occurs before CPU reset.

To ensure that the PC/SP is loaded correctly it is important that
any modifications to the flash memory (for example, due to a
kernel being specified with -kernel command line option), occur
before the CPU reset occurs. This ensures the correct PC/SP is
loaded.