Be a little stricter about addresses.

1) Word32 makes more sense as an address type, because, well, that's
   what addresses are in ARM.  This also deals with wraparound
   branches — e.g. branching one instruction back from 0x00000000 sends
   you to 0xFFFFFFFC (as I understand it).  Before, we were treating
   these as invalid "negative" branches.

2) This also means we have to extract the offset from branch
   instructions a little differently.  From the ARM Architecture
   Reference Manual:

       The target address is calculated by:

       1. Sign-extending the 24-bit (two's complement) immediate to 30
          bits.

       2. Shifting the result left two bits to form a 32-bit value.

       3. Adding this to the contents of the PC, which contains the
          address of the branch instruction plus 8 bytes.

    ... which is exactly what we now do.

3) While we're at it, keeping track of the contents of the PC when
   reading/parsing an instruction is more useful than keeping track of
   the address of the instruction.  I mean, it's only branches that
   need it, and what they really need is the PC.