Core functional representation

Resolves #710 when merged, but not even nearly ready yet.

Not sure there is much to talk about yet, I was hoping to get a bit further with it, so everything is subject to change still.
By the way, we have a total muddle of representation for product and sum types at the moment, thanks to this: https://github.com/purescript/purescript/blob/32fb228ccf1cf3f7ca6512e02506caad8e504882/src/Language/PureScript/CoreFn/Desugar.hs#L47-L53

Product types basically are records because of it, and sum types don't exist at all outside of case/binders.