These could be defined in a similar manner to how `eltype` is handled for `AbstractArray`s:
```
eltype{T,n}(::Type{AbstractArray{T,n}}) = T
eltype{T<:AbstractArray}(::Type{T}) = eltype(super(T))
```
I'd also prefer more consistent names: what about `variatetype` and `supporttype`?