Values like styles or arrays have children which need to have
their source and comments preserved.
Change-Id: I6fc713ba36627e6d66c7930b4080cc1403bac207
When the separator was the last character, the tokenizer would skip
the empty string, which is wrong.
Change-Id: I64ceb4e8d4ac48ee41d40781ab5785a3bc61b24d
An early refactor. Some ideas became clearer as
development continued. Now the various phases are much
clearer and more easily reusable.
Also added a ton of tests!
Change-Id: Ic8f0a70c8222370352e63533b329c40457c0903e