Memory read/write fixes

When I added the Platform_MemRead/Write routines, I passed the address
in as an uint32_t.  This changes corrects that mistake and uses a void
pointer instead.  This allows the code to compile and run correctly on
both 32-bit ARM and 64-bit x86 targets.

ReadMemoryIntoHexBuffer(), WriteHexBufferToMemory(), and
WriteBinaryBufferToMemory() are written to use word and half-word
accesses when the number of bytes requested are exactly 4 and 2.  I
have added checks to fall back to byte accesses if the word and
half-word accesses aren't aligned properly.  Before making this change
the debug monitor would hang if an unaligned access was made by GDB
while debugging an application which has enabled alignment faults.