[new AA] aaLiteral compiler support

This is a dmd part of the new AA implementation. 
This PR depends on D-Programming-Language/druntime#1046 and uses new aaLiteral version (with arrays of keys and arguments)

>Currently you're not instantiating the literal for this.

We don't need `aaLiteral` instance for it.
Compiler should generate `aaLiteral` when it is needed: There are two cases where we need `aaLiteral`:
1. `[1: 2]`
2. `aa[key] = value`
The second case is clear: we simply generate `aaLiteral` in `IndexExp::semantic`
The first case is more complex: we should generate `aaLiteral` in `AssocArrayLiteralExp::semantic`, but compiler may change the `AssocArrayLiteralExp` type without creating a new `AssocArrayLiteralExp` instance.
This may be happen in a many places: For example:
```
const(int)[int] aa = [1:2]; // #1
void foo(const(int)[int]);
foo([1:2]); //#2
```
However we may be sure: when `AssocArrayLiteralExp` type is changed, `aaLiteral` type is created for this type.

>This is a little problematic when such a declaration is in a library.

It does not matter where you declared a type. `aaLiteral` should be instantiated where it will be used.