Implement Core ADT from the SPJ book

Possible point of discussion: where does the code live? I went for `NYHC`, so we get a nice NYHC.foo hierarchy, but `src` would have been perhaps a more traditional choice. But then we'd need `src/NYHC` to get the same hierarchy. Having looked at a couple of different Haskell projects, having the `src` directory have the same name as the top-level module seems reasonably common.