core.internals Roundup
Wishlist:
- [ ] It'd be nice if `self._data` _always_ pointed to a BlockManager object.  This would require some changes to the existing accessor classes and Index.
- [ ] It'd be nice if the exposed surface of core.internals were reduced.
- [ ] #17144 Allow external libraries to define custom Block
- [ ] #7964 allow Period to be a first-class type via a PeriodBlock internal type

Refactoring:
- [ ] #9859 blocks, not series, should contain logic for arithmetic

Cleanup:
- [ ] 9 "# FIXME" comments
- [ ] 6 "# TODO" comments
- [ ] identical comments on `BoolBlock.convert` and `ObjectBlock.convert`: `# TODO: Refactor when convert_objects is removed since there will be 1 path`.  I _think_ convert_objects has been removed, so this may be ready.
- [ ] Several comments suggesting workarounds for numpy<1.7 that may no longer be needed.
- [ ] I've [been told](https://github.com/pandas-dev/pandas/pull/18376#issuecomment-346969384) `replace_list` is a kludge
- [x] #19179 `form_blocks` and `make_block` have small inconsistencies.  If these were reconciled, some redundant code could be removed.

Possible Bugs:
- [x] #19243 Checks for `hasattr(item, 'reindex_axis')` are used but the `reindex_axis` methods themselves are never called
- [ ] #19233 TimedeltaBlock.fillna assumes integer is a second, not ns (or refusal to assume)
