Includes all necessary headers and uses a forward declaration where applicable. Ensures inclusion changes in other headers don't break the compilation of these headers and source files.