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
In particular https://github.com/tessel/runtime/pull/566/files#diff-ab278dd765496b6c1e4511b40de49c5dR146