This implements both `arbitrary::Arbitrary` and `quickcheck::Arbitrary`
behind optional dependencies on their respective crates.
(cherry picked from commit 3e78c62b964b0cb1e19506156511df7384b708f1)
This adds a builder to run `cargo miri` in order to check for certain
classes of undefined behavior.
One thing to note is that we've had to parameterize a number of tests to
use a smaller cycle count under miri. This is because miri's stacked
borrows checker is superlinear:
https://github.com/rust-lang/miri/issues/1367
This can cause the miri builder to run out of memory. To avoid this, we
reduce the cycle counts for a few tests that are particularly expensive
when we're running inside miri.