Add a splay tree implementation

I've had a [splay tree implementation][gh] externally, but it seems like this
may be a good new home for it!

[gh]: https://github.com/alexcrichton/splay-rs

This splay tree implementation is not quite of the quality one would expect of a
standard collection because it primarily doesn't implement iteration by
reference. Due to the self-modifying nature of lookups, I'm not 100% sure how to
safely implement iteration at this time, so only consuming iteration is
provided. Otherwise though I've tried to mirror the interface of HashMap as much
as possible in the implementation!

The implementation also leverages very little unsafe code, so it's not the most
efficient implementation by a long shot. Primarily the splay() method is
probably quite a bit larger than it needs to be!
Isn't this still UB without an UnsafeCell somewhere? I guess this is just another face of https://github.com/rust-lang/rust/issues/19733#issuecomment-66700316

That is, you can get a ref `x` to a Node, someone can call `get` on the tree, this changes the ptrs on the Node. Then you try to follow one of those ptrs through `x`. What happens?