Added Cargo

This PR adds Cargo and also changes make to use `target` as a build directory
to be consistent and to allow the two build systems to be interchangeable.

Cargo.toml's treatment of the codegen step is not ideal right now, as it treats
is as a `./configure`-like step as opposed to treating it as code, which means
that it runs every time you run `cargo build`. I don't see a way around this as
Cargo is not extremely flexible right now (or at least is not documented as so).