Use Cabal as the build system instead of bash scripts

This is just a suggestion here so feel free to close if you don't want to go this route.

I made this PR because when I used the `compile.sh` script the server didn't work for me. This turned out to be because the `public/build` and `public/cache` directories existed and I needed to delete them manually. Rather than fixing the custom build scripts for *nix and Windows to be idempotent I thought it would be preferable to leverage a 'normal' Haskell build pipeline that would work consistently across platforms.