rewrite unlit to behave more like ghc's unlit

hopefully this fixes most literate code issues (finally)