Issue 6469 & 8864 - consistent semantics for variable initializer

- [Issue 6469](https://issues.dlang.org/show_bug.cgi?id=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](https://issues.dlang.org/show_bug.cgi?id=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`.