Refactor some of typecheck

Get closer to fitting the metrics
Run tests per docs
Clean up style violations
Use path like names in more tests
Implement integrity checks
Always encode OptionalNone in new style
Flatten/unfill applications and builtins when encoding
Remove multi-argument applications

They only exist in binary encoding, so let's keep them there.
Working typechecker
Type inference/checking about half done

Passing unit tests for features implemented so far
Support headers for HTTP import
Binary encoding

Every AST node uses as_json to express the generic structure for
encoding itself.  Expression aliases as_cbor to as_json by default and
then uses as_cbor in to_cbor (aliased as to_binary).

This design is because we need to override the encoding of Double for
CBOR, but want to keep the normal Float value for as_json in case that
is used directly (to avoid surprising the user).
If trying to import from IPFS, fallback to gateway
Update to latest dhall-lang
Run all tests on CI
First pass at import resolution
Tests are long for good reasons
Try on generic visitor
Builtins are part of the standard set