Clean categorical component

Not ready for actual merging but this is a clean branch of the `CategoricalComponent` code without the BeeSwarm stuff that was in my other branch for #209 and #211.

The component transparently works in `ScatterClient` and `HistogramClient`. I agree with @ChrisBeaumont that a simple adjustment to the axis labels would be pretty easy. It even does Categorical vs Categorical scatters and the ROI selection seems to work but I haven't tested it extensively. 

I implemented a simple jitter (using a uniform distribution). If we put an extra widget button to change the jitter method whenever a 'categorical axis' is present we could easily switch between representations.