Re-implement output mode as space char and case

Instead of using a bunch of different cases for the output modes, I have
reduced it to a case and space_char argument. Using a state twice no
longer toggles it. I decided that the user would probably rather have a
universal clear and a universal 'on'. That way, if the user is unsure of
whether or not they are in caps, using the 'CAPS' stroke will ensure that
they are.

For the two variables:

- Case values possible: none, title, upper, lower
- Space char values possible: any string

I have also added a few new commands that should be interesting. This is
the complete list:

CAPS, LOWER, TITLE, CAMEL, SNAKE, CLEAR_SPACE, CLEAR_CASE, SET_SPACE:, and
CLEAR.

- As before, CAPS is uppercase, LOWER is lowercase, and TITLE is titlecase.

- Camel sets case to title case, adds '' as the space char, and then sets
the first word to lowercase. Output is, for example 'variableName'

- Snake sets space char to '_'

- Clear space sets space char to ' '

- Clear case sets case to 'NONE'

- Clear sets space char to ' ' and case to 'NONE'

- SET_SPACE is a special command. It will set the 'space_char' to whatever
you include after the colon. For example, {MODE:SET_SPACE:-} would create
a-sentence-separated-by-hyphens, {MODE:SET_SPACE:, } would made a comma,
separated, list.

The commit also includes test cases.