Pre-pre-process headers exactly once

The previous implementation if local header parsing results in the
header file being pre-pre-processed each time it is included. This is
inefficient and makes the verbose logging extremely confusing.

In fixing this also gain enough information to report errors if header
files contain raw hashbang directives (we do not rewrite header files;
these are consumed by the C++ pre-processor directly).

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>