New "values" parameters for message boxes

Sometimes it's useful to get a value instead of the text of the button
when returning from a dialog. 2 examples are when translating an
application (you don't want to write your logic according to the text of
the button) or when you want to chose between 2 objects with a dialog.

I hesitated between this and passing objects with both a text and a
value properties in the third parameter. Normally I try to stay away
from parallel arrays, but in this case I think it's easier to update
existing code, plus if the arrays are not of the same length it's not
critical (we pass the text of the button if the 2nd array is shorter,
and we'll never return the value if it's longer).