Implement lazy quickcheck shrinking for numbers

Floating point shrinking is a little ugly at the moment because it goes through two layers of `Box<Shrinker<A>>`s.

Thanks to @alan_andrade for his help on this one.
Use a trait for abstracting over functions calls (instead of an enum).
Implement `#[quickcheck]` syntax extension