[WIP] implement tests using hypothesis
[skipci]

Related: #17978 

Exposes a whole bunch of broken cases.  Many of them look like they are not currently caught because the large majority of offset tests use tz-naive pydatetime inputs.

Note this does _not_ fix these bugs.  The goal here is a Proof Of Concept for using hypothesis and discuss if/how we can make it useful.

It also doesn't add hypothesis to the requirements because I have no idea what the appropriate file is for that.
so you *could* add this to ``ci/requirements_dev.txt``. but also in this test module you need a ``pytest.importorskip('hypthosesis')`` are these determinstic tests on a single run? e.g. we are *not* saving state for travis runs @jreback I don't think hypothesis tests are deterministic, but in my experience they are "deterministic enough" (they will usually find the most significant edge cases very quickly - they don't sample the space randomly). If you find edge cases, rather than trying to save the state of the database between runs, you can add specific examples with the `@hypothesis.example` decorator. After a couple of days of poking at this, I think it is worth implementing, but it is much too slow to run in the CI.

Running locally has turned up dozens of broken cases.  To the extent that we can phrase tests as "for all A such that B, assert C" this can be a useful tool for identifying corner cases.  When they are found they should just be made into regular tests (and uh, fixed). > After a couple of days of poking at this, I think it is worth implementing, but it is much too slow to run in the CI.

You can always tune the `hypothesis` tests to reduce the amount run on any given CI run. Maybe on each PR you run 50 test cases or something and then set up a master branch build that runs once a week that runs 500 or so. I'm still interested in this, but closing because it is not actionable at the moment.