Conservative and liberal string encodings

This PR started as an attempt to deal with #530.

Eventually, honoring i18n.commitEncoding turned out to be unnecessary while crafting a commit. This PR morphed into segregating the Marshalers into Strict and Lax categories.

 - Strict encoding will be used when passing data to libgit2 (and throw when the passed in string cannot be converted into UTF-8 bytes)
 - Lax encoding will be used when retrieving data from libgit2 (and convert (mangle) the data without throwing)