Customizable State-Based Serialization/Deserialization

allows users to define functions in an 'options' object passed to the SerializerFactory which allows the user to customize parsing/serialization behavior.

An example application would be for the L10N team to add comment-embedded commands (such as "# translate: false" marking a block of key/value pairs which shouldn't be translated).  An example implementation of this can be found in the two test suites added to test/properties.js

Documentation for the "options" object has not yet been added; this pull request is intended to show the idea and receive feedback.  If we decide to pursue this direction, I will work on adding documentation.