Implementation using a char[] rather than StringBuilder

Following "standard practice" I have created a
UseCharArrayOverStringBuilder bool to toggle on and off.
Merge remote-tracking branch 'origin/master' into char-buffer-vs-stringbuilder
Changed AlwaysUseCharBufferForStrings and added AlwaysUseCharArrayInsteadOfCharBufferAndStringBuilder
Add char[] buffer functions for numbers

Continuing to add char[] buffer functions as replacements for all the
StringBuilder() ones
Align and fix comments
Merge of upstream/master
Merge remote-tracking branch 'origin/master' into char-buffer-vs-stringbuilder
Stop creation of other types if char array is specified
add a test for #73
reduce test for #73 to minimal repro; fix #73, general error with converting internal list to array when the array is null
add a failing test for #67; pr isn't mergeable due to drift and containing some extra changesets; the report is real, pulling the fix in manually
re-apply #67; closes #67
extend the end of stream test a bit
fix tests
merge + some stylistic fixes & removing a dead test
consolidate into inlines some methods; in prep of some more experiments
stopgap commit; I don't think we actually *need* a separate char[] here, collapse to reduce memory pressure
elide char[] in appropriate cases now; destroy dead test
Merge remote-tracking branch 'upstream/master'
Merge branch 'master' into unsafe-write-encoded-string-3