REF: Implement core._algos
ATM core.algorithms and core.nanops are a mish-mash in terms of what inputs they expect.  This implements core._algos directory intended for guaranteed-ndarray/EA-only implementations.

For the first function to move I de-duplicated a `shift` method.  Need suggestions for what to call this module.
> what other functions do you envision to put here?

1) EA-compatible variants of np.broadcast_to, np.tile, (maybe np.putmask?), etc will likely have their own file.
2) Things like `shift` where we can pull the meat of the method out of internals.
3) Some parts of algorithms and nanops that are array-specific
    - Some of the functions in these files seem like they are doing Index/Series unwrapping haphazardly.  By separating out the array-specific parts, we can ensure we do those unwrappings just once.
 Renamed "_algos" -> "array_algos" thanks @jbrockmendel the above sounds like a good plan @jorisvandenbossche another candidate for array_algos would be most of what is currently in dtypes.concat, which you and i agreed was a weird place for those functions Yep, now another option for those concat things would be to move each of them to their respective array implementation (but that might depend a bit on how we rework the EA interface regarding concatting) > move each of them to their respective array implementation

I like that idea quite a bit