[new AA] implement aaLiteral

This functions will be used to constructing AA values: literals and nulls. When this PR will be merged, I will create PR for dmd, which uses this functions, and when dmd PR will be merged, I'll create PR, which rewrite this functions to use new AA implementation.
We still have to let the compiler infer safety because appending a struct to an array might call an unsafe postblit.
You can make the cast trusted by using a trusted function literal.
```d
void[] key_slice;
() @trusted { key_slice = *cast(void[]*)&keys; }();
```