Fix some msvc failures.
Suppress some compiler warnings.
Added iterator based constructor.
Moved docs to better position.
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.