Follow include order conventions even in headers
Remove convention that `*private.h` headers include the public header

Although it saves a little typing, it breaks the convention of
including what you use, so remove it and be explicit.
Update HACKING file with changes about forward-declaration