ENH support multiclass targets of string objects

Here's a first hack at fixing #2374, #2618. I think we should get this into the next release.

There are probably more parts of the code to test, but I thought the main invariance tests were low-hanging fruit. Feel free to offer further commits to the patch.