The problem is that when something that *can* be converted to a static array, but *isn't* a static array, then the object's refness can't be taken into account. With the correct alias this', an lvalue object can yield an rvalue static array, and an rvalue object can yield an lvalue static array.

I'm trying to detect this.

`forward` is a template that "recalls" the arguments, preserving their lvalue-ness. This can allow a function that "took" an rvalue to make a call while still passing an rvalue. It's used for a form of "perfect forwarding". I'm using:
```D
return appender!(E[N])(forward!array);
```
To try to coerce the static array out of array, while still preserving the rvalue/lvalue information from array. I'm calling `appender`, to make a "second loop", to give `appender` a second opportunity to check the passed static array is valid.

Well that's the idea anyways, but it's not working, which is why I'm calling the constructor dirrectly. Unfortunatly, it does mean we are letting some unsafe code through, but I don't know what to do about it (without breaking code that is).

Of course, we'd have none of this mess if static array didn't egenerate to slices to begin with...