Move some deprecations along.
Revert "Merge pull request #2573 from nordlow/inout-array"

This reverts commit 4ae1b147a35236edc97cf6cb63ff98fb1b4d5268, reversing
changes made to 335228cb079ccc2060790a2b23bca5db645fa7f0.

Conflicts:
	std/container/array.d
Add unittest to prevent repeating regression

See https://issues.dlang.org/show_bug.cgi?id=13621
Merge pull request #2643 from Dicebot/revert-regression

[REG] Revert PR 2573
Merge pull request #2642 from jmdavis/deprecations

Move some deprecations along.
First failing try
Yet another try
More isMutable guards
Apply fix: make Array.Range a type again
use the proper element type instead of T

T misses A's qualifiers which are needed. E has them. This means,
const/immutable are taken over from A automatically. This allows inout
to be used on front/back/opIndex. inout doesn't work for opSlice, but the
isMutable!A guard can be dropped.

move*, opSliceAssign, etc would be strictly fine with T, but to avoid
confusion I think it's better to not use T in Range at all.