CategorySelector: Add different ways of searching
We'll need this for HotCat. We'll be able to set multiple ways of
searching, build an array of promises and collate the results once all
of them have resolved.
Also adds methods to set searchTypes and validates the list.
searchCategories() is too long right now, but can be easily broken down
into multiple routines, not sure if that is helpful though.
This also allows the user to choose categories that don't exist yet.