This will do the trick.
A = RandomReal[{0, 10}, {10000, 2}]; B = RandomChoice[{Red, Green, Blue}, 10000]; AB = GatherBy[Thread[{A, B}], Last]; col = AB[[All, 1, 2]]; points = AB[[All, All, 1]]; ListPlot[points, PlotStyle -> col]
Tried the wrappers. Worked great for small datasets. For large (500,000) datasets it was too slow. Had to go ahead and separate the data into multiple lists. The language R was the model.