DeskCalc: tiny whitespace style fix
DeskCalc: Remove extra FrameResized() call.

BView::ResizeTo() calls FrameResized() which resolves to the virtual
FrameResized() method in CalcView. So, FrameResized() was
getting called twice.
DeskCalc: Limit precision of large magnitude results

This targets a problem where a numbers with large numbers of non-decimal
significant digits took a long time to round after converting to scientific
notation because they are rounded one character a time.

To solve this, after converting to scientific notation lop off everything
after 40 characters greatly reducing the amount of further rounding
needed.

An example I used to test this was to calculate 10,000! which gives
a result with 35660 significant non-decimal digits (aka a lot). By loping
off numbers after 40 characters before rounding to fit the operation goes
from ~10 seconds to complete to under a second.

I chose 40 as a max as it is large enough to ensure that the result will
get rounded with some leeway provided for font width variations.
Worse-case scenario is the result is off by 1 in the last place.

Numbers with large numbers of significant decimal digits get rounded
by MAPM so aren't a problem.
DeskCalc: Style fix, add space around binary op
ExpressionParser: Fix parse exception string

The main point of this commit is to fix this line:

temp << (char)type << "' got '" << token.string << "'";

which gets printed when DeskCalc encounters a parse error.

Specifically the (char)type part needed fixing.

This code would try to print the char equivalent of a token which got
converted to lower ascii character between 0 and 15. This would at
best result in a newline and never anything helpful.

I took the germ of idea and expanded upon it reassigning the TOKENs to the
numeric values of the printable characters they represent where applicable.
For instance TOKEN_STAR now has a value of 42 which is ascii for '*'. By
using implicit char -> int conversion the numeric value is avoided in the code.

So now (char)type will, in many cases get you the equivalent ascii char
represented by that type. Those that don't such as TOKEN_IDENTIFIER and
TOKEN_CONSTANT are special cased.

Once the TOKEN's values correspond to their ASCII equivalents some other
simplifications became possible interchanging the TOKEN and the character
it represents.