RE: encoding class and letting the string encode the detail:

Meh.  Either we'll get obsolete codes or we'll have peers trying to parse strings to figure out if their transactions are rejected because they don't have enough fees or because they have a dusty output.

I vote for obsolete codes as the lesser of the two evils.