Spelling.

s/AmbigousParse/AmbiguousParse/
Spelling, 80-col violations.
Make the UserConstraint parser non-ambiguous.

`+++` and `<++` are right-associative, so `a +++ b +++ c <++ d` is parsed as
`(a +++ (b +++ (c <++ d)))`.

Fixes #1159.
Add unit tests for the UserConstraint parser.