BUG: ExtensionBlock.set not setting values inplace
In trying to figure out the difference between Block.set vs Block.setitem I found that ExtensionBlock.set is not inplace like it is supposed to be.  Traced this back to a problem in CategoricalBlock.should_store, which this fixes+tests.

In separate passes I would like to
- rename set and setitem to something like "setitem_inplace" and "setitem_newobj"
- ATM setitem is _sometimes_ inplace; I'd like to make that consistent.