support for non-copyable structs

>This is really unfortunate, we can't find out whether a value passed to aaLiteral was a RValue or a LValue.

Now, when `aaLiteral` is always called by compiler, we know for  sure:  `aaLiteral` arguments is RValue:
```
auto aa = [1:Foo(1), 2:fooobj];
```
This code is replaced by compiler with the following:
```
auto aa = aaLiteral([1, 2], [Foo(1), fooobj]); // aaLiteral arguments is a not general array literals: those are slices, which isn't allocated on heap and those will not be destructed.
```
Now the second aaLiteral argument takes a Foo slice, which contains a correctly copied Foo objects and we may simply bitwice copy it to Entry.value.