fix Issue 13835 - ICE in interpret.c:736 - Issue with static variables
Merge pull request #4203 from 9rnsr/fix13835

Issue 13835 - ICE in interpret.c:736 - Issue with static variables
Simplify CallExp::interpret() and support DotTypeExp in CTFE

Handle function values in each CTFE steps, then interpreting CallExp::e1 just only once will be enough.

Problematic case is a __cpctor call. In it, the 'this' expression is an
unilitialized variable so we need to initalize it before the interpretation of e1.

Also simplify ThisExp::interpret, comes from CallExp improvement.
Simplify CTFE interpreter

- Merely distinguish CTFE values and CTFE references.
- Improve any reference handling, including 'this' expresison.
Add CtfeResult
Remove VoidInitExp::var
+cache VoidInitExp (1)
Make VoidInitExp singleton
+more_singleton
Use UnionExp in ctfeCat
+1 Simplify DotVarExp::interpret

Lazy value CTFE for the block-initialized instance field.
+2 Simplify PtrExp::interpret

All CTFE pointers now always use AddrExp, so we can rely on the representation.
+3 Simplify use of resolveSlice

Elide caller-side check for the code readability.
+4 A little simplify in SliceExp::interpret
+5 Simplify IndexExp::interpret
+6 Small cleanup in CommaExp and ArrayLengthExp
+7 Simplify interpretAssignToSlice
+7a
+8
+8a Add resolveIndexing and simplify interpretAssignToIndex