Avoid allocating array literals on initialization

With the changes from this pull request, the following program does not allocate anymore:
```d
extern(C) int printf(const char*, ...);

void main() {
    int[3] x = [1, 2, 3];
    printf("%d\n", x[2]);

    auto a = 4;
    int[3] y = [1, 2, a];
    printf("%d\n", y[2]);

    immutable int[] z = [1, 2, 3];
    printf("%d\n", z[2]);
}
```