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 I'm sorry, I should have clarified. The benchmarks were run with `cargo bench --features thread-local` which enabled the `#[thread_local]` usage for the various macros, as well as building everything with optimizations. Upon removing the calls to `black_box` the statik and thread_local benchmarks are completely optimized away (verified by inspecting the disassembly):

```
running 6 tests
test dynamic      ... bench:       529 ns/iter (+/- 251)
test local_data   ... bench:      5957 ns/iter (+/- 4)
test os           ... bench:      9789 ns/iter (+/- 12)
test scoped       ... bench:      1528 ns/iter (+/- 6)
test statik       ... bench:         1 ns/iter (+/- 0)
test thread_local ... bench:         1 ns/iter (+/- 0)

test result: ok. 0 passed; 0 failed; 0 ignored; 6 measured
```

I didn't find this very useful, so I added `black_box` to prevent this from happening. I didn't intend for it to hinder optimizations. Do you know of a way that I could measure without hindering optimizations?