fix Issue 6469 & 8864 - consistent semantics for variable initializer

- Issue 6469 - Compiler fails to initialize associative array: string->[string->string]
  If variable type is specified, its initializer should be recursively analyzed to fit the target type.

- Issue 8864 - Simpler syntax for array literal of structs from one argument
  By the recursive analysis, implicit struct constructor call is properly handled in `ArrayInitializer` elements.

But, for multi-dimensional block initializing of static array variable, the 'target type' should be determined before `init->semantic` call.
To do that, I added `checkMultiDimInit` and `canMatch` member functions in `Initializer`.
Add support for legacy opCall feature
Propagate error in nestedRefs check

It's necessary to avoid redundant errors in fail_compilation/diag0148.d.