IteratorsMD: allow AbstractArray methods to be overriden

Any AbstractArray type that wants to override an indexing methods would
have formerly run into trouble:

    next{T,N}(A::SomeArrayType{T,N}, state::CartesianIndex{N})

would be more specific in the first argument, but (because
CartesianIndex{N} is less specific than CartesianIndex_$N) would be
less specific in the second argument. So there was no way to avoid
a method ambiguity warning.
IteratorsMD: document eachindex and add NEWS.md item
IteratorsMD: avoid ambiguity warnings by using more stagedfunctions

This also implements a way of handling 0-dimensional arrays that
doesn't require adding a field to a CartesianIndex_0.
New SubArrays based on stagedfunctions
Convert to parametric syntax
Make SubArray constructors parametric
Fix problem in getindex for DArrays
Support Colon as an index
SubArrays: efficient linear indexing for appropriate types

This incorporates important innovations of ArrayViews
sub(::SubArray,...): final index doesn't trigger linear indexing
sub always converts interior Int->UnitRange
SubArrays: add lots of tests
Add devdocs for SubArrays
SubArrays: fix first_index bottleneck in construction