I've added the Reduce() matcher which does a reduce (or fold) over the results
from another matcher. This is the generalisation necessary to make String()
work in a consistent way across different types.
Reduce() works very like Add() by default - the main difference is that it
returns something when there's no result, while Add does not.
It turns out that the generalisation isn't very useful (at least, I can't see
a good example), but the code remains consistent and logical, which is
probably for the best.
Andrew