Fix node 0.8 HMAC code

In 0.8, crypto returns binary-encoded strings for a lot of operations. This
normalizes everything to Buffers and fixes some type confusion. Previously,
node 0.8 encoded HMACs as
  base64(encodeUTF8(pretendEachByteIsUnicodeCodePoint(hmac)))
and checked them correctly, while node 0.10 encoded HMACs as
  base64(hmac)
but checked them incorrectly.