Rework to more elegantly handle failure; add `chain-parser`.
Added tests and fixed parse-char to return :rest as a string.
Add get- and put-state, along with expect-char.