Nif parse cleanup

These two commits cleanup the NIF parsing code by breaking the NIFFile into two classes, one to represent an already parsed file, and another to represent a stream of NIF data to be parsed. The other change turns the large if/else block in the main parse function into a table of node name to factory function entries. These commits have no functional or relevant performance changes, they are merely a cleanup of the structure. I have a set of performance improvements that depend on these changes.