Add `-collecting-reduce' and its related macro.

This is useful when you need to try several results that you get in a reduce-like fashion.

I have use this to create a buffer naming scheme when two files of the same name (say `__init__.py`).  The standard scheme is to append "<N>", but this is not helpful.  So my code simple finds the shortest unique buffer name using the filename's path, this way the second buffer is named like: `models/__init__.py`.