Add test for whitespace removal.
Add special remove whitespace fn.
Remove whitespace handler from lex fn.
Change lex() to call removeWhitespace() then tokenize() fn
Remove unused out array.
Check inProgressToken is more bulletproof way.

* Will still work if there is a change in the order or number of args to tokenize().
inProgressToken should be inited to an empty string.
Add test for empty input to lexer
Add in idiomatic brace formatting.
Rewrite lastIndexOf to just last element of list, rather than use pop().
Check for empty list first in formatArray().
Remove unused var.
Rewrite formatArray() into three declarative blocks.

* First, the empty array case.
* Second, the nested expression case.
* Third, the unnested expression case.
Delegate operator execution to map of operator strings to fns.
Rewrite doMath do more declarative form.

* Eval first operand.
* Eval second operand.
* Run operator on first operand and second operand.
* Note: concatting results is gone - not necessary.  Whole math expression should be one nested expression, so nothing to concat.
Reorganise tokenize to reduce duplication.

* inProgressToken is now either undefined or actually in use.
* The fn begins with the empty list check.
* The inProgress token has been localised to one clause.
* There are three main blocks: empty list, deal with inProgressToken, deal with normal input that is tokenised char by char.