loosen cabal dependencies, rewrite level loading logic so that level.pinhole gets loaded if first-arg level fails to load