xor_keystream(): Use unsafe, and process one byte at a time.
xor_keystream(): Use unsafe, and process one byte at a time.

After playing with a bunch of different variants:
 * I messed up taking performance numbers in my initial pull request,
   so the numbers I quoted are off (I was getting chacha/salsa 20
   confused I think).
 * At least on my desktop, minimizing the codesize/branches in
   xor_keystream appears to give the best results, leading to this,
   which also happens to be the most portable.

The 64k chacha performance goes from 326 MiB/s to 363 MiB/s.  The 10
byte case got slightly slower (232 -> 208 MiB/s), but I think the
tradeoff is worth it.

It's worth noting that all of the ARM targets currently supported by
rustc are ARMv6+, so unaligned access will work if that's an approach
people want to try but this is getting to the point where there's
better ways to optimize the code (generate more keystream at once, do
the xor as the keystream is generated, etc).

mseri/rust-crypto,canndrew/rust-crypto,DaGenix/rust-crypto,thinkingfish/rust-crypto,nmathewson/rust-crypto,PeterReid/rust-crypto,thinkingfish/rust-crypto,andreasots/rust-crypto,andreasots/rust-crypto,nmathewson/rust-crypto,canndrew/rust-crypto,mseri/rust-crypto,tempbottle/rust-crypto,DaGenix/rust-crypto,tempbottle/rust-crypto,PeterReid/rust-crypto