Use inout for ref returning members in std.container.array

For motivation see 

http://forum.dlang.org/thread/agyeejbrpotpjrecepyl@forum.dlang.org#post-wysehvbsfnezfozsagpl:40forum.dlang.org
You *could* check if `is(const(Range) : Range)`, and act accordingly, in which case things would work for types without mutable indirections. This could be better than nothing, but it might also introduce something we'd want to get rid of.

OR, we could have define a ConstRange, which would only be tail const. We'd have both:
```D
Range opSlice();
ConstRange opSlice() const;
//Along with a way to make sure we have is(Range : ConstRange)
```
I think this is the correct long term solution (Along with a potential ReverseRange for certain container).

BUT, either way, I think this requires a DIP and consensus.

As I said, it's kind of accepted that a const container can't produce a proper range. So (IMO) for now, we either do something simple and clean that works, or we leave it as is.