Fix up Buffer's handling of all the encodings

Mild overhaul to finish up Buffer encoding work which was started in the ["Strings" pull request](https://github.com/tessel/runtime/pull/542) but wasn't really fully implemented or thoroughly checked over.

Highlights:

- adds utf16le encoding/decoding (which had been completely absent)
- improves ascii/binary/hex/base64 logic too
- generally cleaner in/out logic
Oh, you actually already had one of the utf16 functions in a different file. Will review more thoroughly. On a slightly-more-general note, I'd very much rather have an [endian.h](http://man7.org/linux/man-pages/man3/endian.3.html)-like set of macros than manually swapping or not every place we care about endianness. I.e. here we'd simply use `htole16` and let the macros+compiler+optimizer do the dirty swap/no-op work.