Fine-grained errstate handling
- [x] closes #13109 
- [x] closes #13135
- [x] tests passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [x] whatsnew entry

The precise strategy to be taken here is open for discussion. I tried to be reasonably fine-grained rather than slap a generic decorator over everything because it's easier to go that direction than the reverse. The `errstate()` blocks in the tests were added _after_ fixing all of the library code. Unfortunately, these are less fine-grained than I would like because some of the tests have many lines of the form `assert_array_equal(pandas_expression_to_test, expected_raw_numpy_expression)` where `expected_raw_numpy_expression` is what is triggering the warning. It was tedious to try to rewrite all of that to wrap just `expected_raw_numpy_expression`.

I think I got everything exercised by the test suite except for parts of the test suite that are skipped on my machine due to dependencies. We'll see how things go in the CI.

I haven't added any new tests yet. Could do if requested.

@rkern ohh that was easy 😄 

can we have a test which asserts the actual error state (is the default). Put in `pandas/tests/test_util.py`.
 ## [Current coverage](https://codecov.io/gh/pydata/pandas/pull/13145?src=pr) is 85.27% (diff: 100%)

> Merging [#13145](https://codecov.io/gh/pydata/pandas/pull/13145?src=pr) into [master](https://codecov.io/gh/pydata/pandas/branch/master?src=pr) will increase coverage by **0.01%**

``` diff
@@             master     #13145   diff @@
==========================================
  Files           139        139          
  Lines         50380      50439    +59   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits          42953      43012    +59   
  Misses         7427       7427          
  Partials          0          0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last update [453bc26...ef9c001](https://codecov.io/gh/pydata/pandas/compare/453bc26e07ebbfea33dda9ff2f4efab683718506...ef9c00130c5353b72a19e4357b7926ab4a6a0290?src=pr)
 Please excuse the CI churn. The jobs for the older commits could be cancelled.
 no prob. thats an annoyance about Travis. 
 @rkern I think we can now do this for 0.19.0

can you rebase / update?
 @rkern can you rebase
 @rkern, you now have another watcher on this... :-) Do you have an ETA when you could rebase?
 @jreback Rebased.
 this looks pretty good. just some minor comments. can you add in the whatsnew a sub-section, then add a warning (so its a big red box!) near the top.
 can you add docs and rebase. ping when green. this touches lots of code so I will merge then.
 @jreback rebased and docced.
 looks fine. though failing on all sparse comparisons....pls ping when green
 @jreback Fixed thinko. All green.
 @rkern Thanks a lot!
