Const vs static

A proposal to extend statics/constants so that `static` always declares a global variable (memory location) with an address and `const` declares global *values*. `const` is what we expect users to use most of the time, `static` is only intended to be used in narrow circumstances.
This is similar to C++'s `constexpr`. See also [my related thoughts here](http://www.reddit.com/r/rust/comments/2e76zs/rust_as_a_host_for_multilevel_languages_using/cjxdrd5) (s/`static`/`const`/g). In particular C++ also originally started out, in C++11, with only allowing `constexpr` functions to consist of a single expression (although *with* recursion); then in C++14 they greatly generalized this to allow various imperative constructs as well, as long as they can be computed at compile time. (I haven't looked at what the precise rules are; they're probably complicated.) In Rust, though, we have the advantage that *all* code barring `unsafe` has a precisely-defined meaning. This means that *all* Rust code which doesn't involve `unsafe` can be safely evaluated at compile time! (We can't prove termination, but I don't think we make any attempt to prove it for e.g. `impl` lookup or macro expansion either.)