Merging work from local private repository to public branch.  Changes include adding untested, and unreachable constructs, generalizing the makefiles slightly, and rearranging the file layout.