Revert "Replace forward struct declarations with typedefs"

This reverts commit ab6976ea36a9f1f32d64e80540344fe374dc4dd8.

Apparently this is not standard C because of (at least the chance of)
multiple definitions of the same typedef, although it works and
compiles fine unless you use `-pedantic` compiler option.
Replace forward-declaration with #includes

This makes it easier to mix up and forget an include and also pollutes
any files including these headers with symbols and definitions they
don't want or need, but it allows for `#include "foo.h"` instead of
`struct Foo;` which some consider better for some reason.