Allow replacing subobjects of an array-range constant aggregate

If we have:
struct
{
	int i, j;
} a[] = {
	[0 ... 5] = { 1, 2 },
	[2].j = 3
};

... then the second designation ([2].j) replaces _part_ of the copied
aggregate `{ 1, 2 }'. The first of a [x ... y] range is the init itself
({ 1, 2 }), and the following all index to this. So we need to copy the
{ 1, 2 } init (from [2]) and then replace the expression for member j.

This can currently only happen with constant aggregates, as we don't
have the data structures to represent replacing something at runtime:

struct A x[] = { f(), [0].a.i = 3 };
Tweaks for range-init replacement - still incomplete