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
Okay, I ended up down a huge rabbit whole with this [right now all the integer encoding/decoding methods are nicely endian-agnostic but the float for whatever reason isn't although it seems to make the exact union/aliasing-type assumptions that the others make].

What I've done is borrowed (but improved IMO) the endian additions from #566 and used that instead of my `IS_BIG_ENDIAN` todo.