use available_externally linkage for cross-crate inlined functions
make CrateContext fields private
split CrateContext into shared and local pieces
run optimization and codegen on worker threads
translate into multiple llvm contexts
avoid duplicate translation of monomorphizations, drop glue, and visit glue
make symbols internal when possible
make separate compilation respect #[inline] attributes
add tests for separate compilation