Begin work on low level IR

Very much unfinished. Full of not yet implemented stuff.
update TODO
Update TODO
Add class Select

Pass some params implicitly when doing selections
Update stackage release & use default-extensions in cabal file

Also, fix some minor breakages caused by ghc update, fix the
literate.org example, fix some new warnings, and get rid of the need
for a bunch of Data implementations by using basic parsing functions
in SystemSpec.hs.
remove no longer applicable TODOs
update TODO
std: add TODO comment
std: add show-bool, id
std: use io/wrap instead of io/pure for display-inline

I.e., don't execute the action untio the IO is run
Add let & let1 forms to do macro
update TODO
Add test for latest bug fix
Fix bug when getting free vars of non-rec Let in Monomorphic

Was using fvLet for both recursive and nonrecursive bindings, but for
nonrecursive let:s, the LHS should not be subtracted from the RHS FV set.
std-rs: use native-tls inst of rustls. Better for gemini

Rustls is too strict for non-web, self signed, TOFU use, so use rustls
instead. Right now, TLS does no verification, but we'll fix this.
std-rs: add tcp connection, tls connection w rustls

Basically works, but rustls won't last. It together with webpki is way
to restrictive in what certificates validate, so it's not very usable
for non-web, self-signed scenarios like gemini.
Rename foreign-core to std-rs
Less desugaring in Parse (do in Infer instead), more concrete Parsed.

Step towards improving error messages. Among others, the function-related ones can
end up misleading due to bad SrcPos:s given to nodes generated from desugaring.
Add example list-monad to demo macro features & the do macro
Add patterns & declaration of literals in macros

Example of a do-notation-like macro using the new features:

    (defmacro do (<-)
      (case (do-bind ma) ma)
      (case (do-bind (<- a ma) mbs ...)
            (do-bind (fun (a) (do do-bind mbs ...)) ma))
      (case (do-bind ma mbs ...)
            (do-bind (fun (_) (do do-bind mbs ...)) ma)))

which can be used like

    (do list/bind
        (<- i (list 1 2 3))
        (<- j (list 1 2 3))
        (if (< i j)
            (list/singleton [i j])
Update carth.cabal to reflect move to sourcehut and .md README