Merge xpg4 m4 and bin/m4
It seems that the sole difference between the xpg4 version of m4, and the default version, is that the xpg4 version introduces support for >> and << shift operators.
While technically this means its possible for a script using legacy m4 to break when exposed to the XPG4 version, I think this has probably close to a zero chance of actually being encountered in the field. Indeed, since this only shows up in eval() expressions, I expect that any difference in behavior is almost certainly the result of a bug in the input file, and probably isn't actually working with stock m4. (In fact, I cannot come up with an input file that would be processed properly by /usr/bin/m4 but result in different output when seen by the XPG4 version.)
It seems to me therefore that the XPG4 version passes the "upwardly compatible" litmus test, and we should just promote its behavior to the default, and merge them. Keeping them separate just wastes disk space and compile time, and leaves our default version with one less capability than the POSIX version.
(The question of the various enhancements possible with GNU m4 is decidedly out of scope for this case, however.)