various parsing/stringifying improvements

- parsed types include two new non-enumerable properties:
typeExpression (the original expression) and lenient (true if parsed in
lenient mode, false otherwise)
- parsed types are frozen objects (no mutating the cache!)
- stringifying honors the useCache option
- stringifying just returns the typeExpression property as-is, as long
as it's present and caching is enabled
update docs for 0.4.0