Implement Categorical.searchsorted(v, side, sorter)

This closes #8420, with code that supports searchsorted in Categorical, for both side='left'/'right' and with an optional sorter. The case of side='right' was tricky, as we look to the right only when matching the category name, not when matching the codes. The docstring and unit tests cover the various cases.

One thing I wasn't sure about was forcing scalar input to a Series. I copied this behaviour from Series.searchsorted to match its docstring examples. To avoid circular imports from series.py importing categorical.py, I got Series via a local import. Probably there is a better way to do this.
It is actually a valid test, for two reasons: 

  * Firstly, Categorical.searchsorted calls Series.searchsorted twice, once to pick the categories and the second time to get the locations of the codes. It isn't immediately obvious how to do this correctly, especially for the side='right' cases. My unit test results for S.ss and C.ss diverged for quite a few iterations of my code before I figured out the correct solution. 

  * Secondly, we want to be sure searchsorted on a Categorical behaves identically to a Series containing the same data, including for the edge cases when Series.searchsorted() isn't obvious (e.g. searchsorted on a scalar returns it as an array).