refactor sexpr parser to return new parse result type

The new result type differentiates between end of stream, success, and
error. Previously, end of stream and error were both represented as
NONE, now reaching the end of a stream "normally", i.e. without error,
is distinct (as ctor EOF) from encountering an error that prevents
parsing (as ctor Error)
mini library for positional streams and related code