Allow string literals to be cast to mutable

It is legal in constfolding, and it's already impossible
to modify a string literal in CTFE.
CTFE: Fix comparison of string enums

String enum compares was failing to compile because it wasn't
checking the base type, so wasn't recognizing it as a string.
CTFE: allow const casts of struct literals

This was permitted in const-folding, but not in CTFE until now.
CTFE: Don't declare tuples wrappers as variables

Only the members of the tuples are variables. The tuple itself
doesn't need storage.
CTFE: Don't declare local enums as variables

They don't go on the stack (they already get a slot in the
global constants table when they get used)
Allow interpret(Error) as a no-op

Allowing ctfeInterpret to accept ErrorExp as a no-op causes less
clutter in the calling code. Probably, this should be combined into
a single semantic()/resolveProperties/ctfeInterpret() call.
Do all interpreting inside CTFE

instead of in the optimizer
CTFE compile: Count total variable declarations

First step towards CTFE compilation. Walk over all
expressions in the function, searching for VarDeclarations.
Sanity check: Add check for errorexpressions that have slipped through