RFC: Add a thread local storage module, std::tls

Introduce a new thread local storage module to the standard library, `std::tls`,
providing:

* Scoped TLS, a non-owning variant of TLS for any value.
* Owning TLS, an owning, dynamically initialized, dynamically destructed
  variant, similar to `std::local_data` today.

[Rendered](https://github.com/alexcrichton/rfcs/blob/tls-overhaul/text/0000-tls-overhaul.md)
Ah one other thing which led me to start out with dynamic-only is the general lack of statically initialized values in the standard library. As you've found out, you can't statically initialize a `Cell` or a `RefCell` for example, and leaking an `UnsafeCell` as an api is pretty unfortunate. This means today for statically initialized TLS with internal mutability that we've got one of two options:

1. Provided Cell/RefCell variants baked in (reimplementing Cell/RefCell) as you did with macros.
2. Force usage of `UnsafeCell` which allows for static initialization.

I'm not a super fan of either of these options, and would prefer to hold out for something like `const fn` or generic constants so we have a better story for statically initialized data. In I found the usage around something statically initialized to be pretty uncomfortable unless we provided a reimplementation of Cell/RefCell (which I'd rather not do for composability reasons), so I opted to have only-dynamic for now.

I do think we may be able to add a static variant later without much pain, but I'd just prefer to see some more well-supported statically initialized values before that time.