Explicitly use std namespace
Header file rearrangement

Forward declaration classes where possible to enable removal of header
includes from a header.

Ensure order of header inclusions are not important by moving header
inclusion of the current class to be the first header include.