~jojo/Carth

ref: db87ea9bdce9470b546bb3098f5d79a9b1023af1 Carth/foreign-core d---------
Update std with undefined & panic functionality
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

LLVM:
  declare @foo(%Foo* %x)

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

we do

LLVM:
  declare @foo(%Foo* byval %x)

Rust:
  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.