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.
this is not actually testing anything, as ultimately s.searchsorted and c.searchsorted both call the same method (meaning the Categorical.searchsorted method). Instead, coerce the series to object dtype (e.g. s.astype(object)). and use that as an expected value. Also include some of the examples you have in the doc-string where you provide an actual expected return.