REF: move logic of 'block manager axis' into the BlockManager
@jreback @jbrockmendel what are your thoughts about doing this? 
Currently the 0/1 -> 1/0 axis switch for the BlockManager happens on the DataFrame side, while I think it would be a bit cleaner to let this be the responsibility of the BlockManager method being called.

For illustration, the diff of this PR is such a change for the `diff()` method: instead of using `_get_block_manager_axis` in frame.py, it's the `BlockManager.diff()` method that takes care of this (so just moving it down a level). 
+1 yep +1 on moving this to the BM. I also added the change for `where` and `shift`, in addition to `diff`. For keeping the PR small, that's probably enough for a first PR.

Other uses cases are eg in `set_axis`, `reindex_indexer`, `take`. can you merge master once more merge master pls