Nif changes and cleanup

Cleaned up and documented part of components/nif.

Work is ongoing, but I wanted to get this out here before I have any more merge conflicts/doing the same work as Scrawl is.

Of note is the new niftest tool and script.  Just point the script at your data file directory and it will validate every nif file.
Here a forward declaration was replaced with an include. Why? The former should be preferred if possible.