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!
I can't say I've personally taken the time to think this through too closely with respect to UB. That being said, correctly informing the compiler is important for other compiler pieces such as driving what can be inside of a `const`. Additionally, if I had correctly used `UnsafeCell` then the compiler would automatically determine that `SplayTree` is `NoSync` (which it definitely isn't!). Which is to say that for now `UnsafeCell` is unambiguously correct for reasons other than mutable aliasing, and I'd have to think more about whether it was actual UB before.