Fix issue 10198 CTFE struct Multidimensional block assignment

The wrong CTFE behaviour was actually coded into a test in test42.d.
It was clearly wrong because it behaved differently depending on where the
initialization was performed. That test is fixed in this commit.
CTFE: allow const casts of struct literals

This was permitted in const-folding, but not in CTFE until now.
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.
Fix error message wording in test suite
Sanity check: Add check for errorexpressions that have slipped through
CTFE: Generate error for shr/ushr/shl out of range
If an error occurs in an ExpInitializer, change it to an error.
Don't save local variables in the global constants list

Even if they are immutable global variables (eg, bug 8400)
Improve error message for static assert

by running optimize first.
Allow creation but not reading of unions in CTFE

It's currently possible to create unions in global scope but not in CTFE.
We can't support reading or writing members, but creation is OK.
Disable horrific cast in deprecated code

This cast is disgusting, and shouldn't compile.
Fix error propagation of index expressions

x[_error] is an error. (Maybe. Though we do know the type).
The other way of dealing with this would be in template.c:semanticTiargs()
to put a check for global errors.
CTFE: fix segfault in DotVarExp

was causing segfault in runnable/nested.d when trying to dereference
EXP_CANT_INTERPRET.
Fix error propagation for CondExp
CTFE: non-property functions arent template values

If it's still a function after property resolution,
don't interpret it. (optimize(WANTinterpret) was a no-op,
so this then failed later).
Fix CTFE version of bug 9315

If a nested struct has no initialized hidden pointer, set it to null
to match the runtime behaviour.
A TemplateExp cannot be a template value parameter
Don't run CTFE on template parameters

It's guaranteed to fail, it's been passing only because it was a no-op.
If this succeeds, we can probably remove the code that this is duplicating.