fix bug de-serializing unaligned memory on some systems

(this is a follow on to pull request 31 on djnewtons branch)

on some systems casting unaligned memory (ie the data pointer) to
types like uint32's, float's etc results in nonsense values because
the memory is assumed to be aligned ... hence to solve this we
memcpy from an aligned buffer (value) to an unaligned buffer (data so
it works as raw byte moves, see below)

note this also simplifies the process_token routine a bit.