NDIterator edits

The most important change in this pull request is adding a friend declaration to other NDIterator types so that the templated constructor for converting to an NDIterator<...,const _Iterator,...> is able to access private data members. It may not be necessary to friend all other NDIterator types, though. Also tthis constructor's definition was missing the _Tensor argument and the enable_if was not allowing conversion from NDIterator<Tensor<double>, double*> to NDIterator<Tensor<double>, const double*>.

I also added various accessor methods and cleaned up the declaration of the external begin and end methods.