Fix bug 10280 CTFE: Circular variable initializers should be detected properly

Use the existing 'inuse' mechanism to detect cycles.
Do all interpreting inside CTFE

instead of in the optimizer
CTFE: run semantic on global variables

Only seems to happen with forward-referenced globals
Don't rerun semantic for const template parameters
Fix bug 10217 ICE(root.c) with nested struct.init.tupleof in CTFE

CTFE version of bug 9315, almost exactly the same fix.
If a nested struct has no initialized hidden pointer, set it to null
to match the runtime behaviour.
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.
If an error occurs in an ExpInitializer, change it to an error.
Forward referenced const as template value parameter

The problem is that the constness of the variable hasn't
been determined yet, so it will fail CTFE.
Not sure if this is correct (see also bug 10075).
Fix enum member type

When creating a variable from an enum member, the type is known from the value.