repeat: many actions may occur in a repeat element

See https://github.com/dmanning23/BulletMLExamples/issues/1 for
discussion.
runner: use the actual raction

Copying it will make the pointer invalid later.
test: set the -funittest flag for the test
expression: completely ignore whitespace
expression: improve error message
expression: continue with testing on failures
expression: more tests
expression: add an empty token type
expression: fix negation

Basically the negation operator requires more external state tracking,
so store the last token in `token` use it to determine whether a '-' is
a negation operator or not.

Also fixes operator precedence when finishing a group by popping
negation off the stack if it is found after closing a group. It might
not be necessary, but it's fine since exponentiation isn't supported.