[decode] Do format detection on Decode, not init.
Add an OpenStep plist generator and parser.

Combined from the following commits:
* openstep
* un/quoted string support, don't use Fprintf.
* (actually use openstep encoding for bools)
* brainded openstep plist parser
* parse data, format dates properly, parse strings properly, chug whitespace properly.
* switch on c instead of on true (just because).
* we care more about ReadByte than Peek now. update type names to match.
* update for new parser interface
* add text decoder into Decode()'s format detection
[tests] Add an OpenStep Parse benchmark (using the same pathological data.)
[text] Actually catch a panicking parser and return its error.
Wrap all errors in plistParseError or invalidPlistError (depending on parse step). XML errors before the first valid tag are invalidPlistErrors.
[xml] If we find no valid elements (but also no invalid elements), invalidPlistError.
[xml] If we encounter a <plist> with nothing in it, return nil (not an error)
[text] Omit empty strings in arrays (we differ from Apple here: subsequent commas are an error in the apple parser.)
[decode] Only fall through XML to OpenStep if we get an invalidPlistError.
[decode] Store the format of the most recently decoded plist.
[tests] Add a test for encoding control characters and other oddities.