RFC: Begin extracting frestanding components of libstd

This branch starts pulling modules out of std into a crate called 'prim'. This crate is intended to have no runtime requirements, no unique allocation or failure, and thus be suitable for use as the foundation of any Rust-based software. It currently includes kinds, intrinsics, mem, cast, ptr, and the swap and replace functions, which appear to be the lowest-level building blocks of std. It should also include most of 'option' but a rustc bug is preventing the move, probably `Drop`, and the comparison traits. `Clone` and some of the operators can't be moved because they have implementations for vectors that require allocation.

Beyond this I expect to add another crate that requires an allocator, adds clone, num, iter, vec, str, etc.

cc #11828