ClientList Iterable

Removed the Scan function from ClientList (and refactored all places it was used) and made the ClientList class iterable.  Calling either begin() or end() returns an iterator which is a thin wrapper around a std::unordered_map iterator, but which also holds the ClientList's internal read lock until it is destroyed (thus making iterating the collection thread safe).

This allows range-based for loop semantics (far cleaner and more intuitive than the lambda-based Scan semantics) to be used with the ClientList class.