Add implicit void return for `defn*` macro
Minor fixes for CLI

- Optimization now doesn't cause a second IR dump
- "Optimizing..." only prints if optimization is actually enabled
Rename `clj-llvm.llvm.builder`

It's now called `clj-llvm.llvm.module-builder` (yes there's a reason
it's in a nested namespace)
Separate `deflib` into two functions

`lib` now just makes an unnamed library, `deflib` gives it a name (like
`fn` and `defn`)
Add error message on failed compilation
Add `alloca`/`load`/`store` LLVM support
Add a unique ID for functions and globals

This is used to ensure functions and globals aren't rebuilt when one's
node is referenced more than once in the LLVM AST
Add `let` support
Fix `def` codegen and add `def` spec

Some minor changes were also made to `clj-llvm.llvm` in order to more
accurately reflect the LLVM API
Tweak builder to allow for native libs in specs
Fix alloca stack overflow
Fix load when `var` doesn't have a name
Fix `return-type` for `:doall`
Add `return-type` for `:alloca` and `:load`
Add pointer-to-pointer cast kind
Add struct interop
Add custom library function spec example
Add `declaration-for` method

Takes a function or global definition, and turns it into a body-less
declaration
Change module builder to build other file types
Add `:decls` to library hash