Smash SMASH into smaller pieces.

Also, rewrite the file parser so that it streams lines, rather than reading the
entire file into memory, and ensure that blank lines aren't ignored; fixes #10.