ref: 3f71c019bc3fd13360c650cd69e5e211660db158 Carth/foreign-core d---------
Disallow []. Add "case" keywords to match-expression to read better
Scale datatype tag size by n of variants. 1 variant => no tag

Types with only 1 variant have no tag. Types with <=2^n variants have
n-bit tag.
Complete (bad-ish) fizzbuzz!
Pass `byval` when passing by reference

So instead of

  declare @foo(%Foo* %x)

  extern fn foo(x: &Foo) { ... }

we do

  declare @foo(%Foo* byval %x)

  extern fn foo(x: Foo) { ... }

It just seemed like a nice thing to do, especially now that
we (mostly?) conform to C calling convention / System V ABI.
foreign-core: Add macro def_carth_closure! for convenience

The definitions don't really end up shorted, but it's all a bit more
overviewable. Lower chance of mixing up names I think.
Add FFI functions display-inline, str-append

Also add hello-world.carth, making use of these.
Add external item declarations

To test it out, change print-int from being a builtin to being an
extern function.
Reimplement foreign core library in Rust

Because Rust is much nicer than C.