refactor(headers): changed from rwlock to mucell underneath

Before:
```
test header::tests::bench_header_get                 ... bench:       430 ns/iter (+/- 18)
test header::tests::bench_header_get_miss            ... bench:       153 ns/iter (+/- 3)
test header::tests::bench_header_has                 ... bench:       184 ns/iter (+/- 6)
test header::tests::bench_header_set                 ... bench:      1102 ns/iter (+/- 14)
test header::tests::bench_header_view_is             ... bench:        33 ns/iter (+/- 1)
```

After:
```
test header::tests::bench_header_get                 ... bench:       191 ns/iter (+/- 14)
test header::tests::bench_header_get_miss            ... bench:       151 ns/iter (+/- 13)
test header::tests::bench_header_has                 ... bench:       182 ns/iter (+/- 32)
test header::tests::bench_header_set                 ... bench:       283 ns/iter (+/- 8)
test header::tests::bench_header_view_is             ... bench:        33 ns/iter (+/- 0)
```

However, I'm not sure how much this differs from just using RefCell, as I think most of the speed up is not using OS locks.
To give better error messages in the case where the second branch is actually reachable (due to an internal error in the use of this function) we should probably do `item.typed.as_ref_mut().expect("some explanatory message").downcast_mut_unchecked()` or so instead of `unreachable!()`.

Generally speaking, these functions should actually be `unsafe` themselves, since they do no checking.