Don't duplicated versions so we avoid the problem of missing one instance to be updated.
Adds forwards declarations in headers and includes all headers in sources, even if they are found by transitive includes.