[Refactor] Explicit includes, move to cpp where possible

Forward declarations for pointers in a header is preferred, then include
the file in the cpp instead.  Also, explicitly include classes needed to
compile header, and do not rely on other includes.