Removed some warnings that appeared in tests

Treating a non-numeric string as '0' is ok within Positron::Expression.
We should never pass 'undef' to Parse::RecDescent.
Expression hardening: parser must consume all

If the expression parser does not consume all the input (which the
parser itself is fine with), an error is thrown.
Hardening expressions: detecting malformed input.
Replaced Parse::RecDescent with homegrown solution

This allows for better hardening, at least. Our use cases are few
enough that we do not need the full power of Parse::RecDescent.
Minor Bugfix
Removed hardening from Parse::RecDescent grammar

It was causing more elaborate test cases to fail, and since I'm
switching to a homegrown solution, I need a working grammar for
speed comparisons.
Parse::RecDescent no longer included via 'use'.

Required as needed instead. Also several additions to comments and
documentation.
Syntax tests with complicated expressions.
Hardening and tuning

Subexpressions now croak earlier, based on potential first characters.
Consuming a character with m{}gc and then resetting pos() has been
replaced with just testing m{} without g (or c).
Tests for syntax errors