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
Clarification: also made the utf16 conversions take an endianness argument, so they can be used by the regexp stuff by passing TM_ENDIAN_HOST for that. This had the nice side effect of making me feel better about how they didn't themselves deal with `uint16_t` arrays.