Avoid exposing functions via ADL.

I'd put the iterators in their own namespace so that they wouldn't pick
up functions in detail via ADL, but I forgot that their template
parameters would cause that to happen anyway. The simplest way to fix
that for now is just to stuff the problematic functions into a
sub-namespace, so that they're no longer exposed.
Avoid Visual C++ warning.

Avoiding:

    warning C4127: conditional expression is constant