Allow conversion from one NDIterator type to another as long as _Iterator type is convertible.
Added method NDIterator::end() which constructs an NDIterator representing the ending state of iteration. Added some other Tensor-like accessors to NDIterator.
Fixed incorrect definitions of NDIterator::size() and NDIterator::end().
Fixed duplicate code introduced in a previous merge.