Merge @alesliehughes

@alesliehughes demonstrated very good taste by picking up Igor's original Pash code and starting to work on it a month ago.

This is my attempt to unify that work with this, so we can work together from now on.

This isn't everything, but it's most of the work from that branch. The most notable omission is Jonathan Ben-Joseph's work from 2008, which was merged as de5a88aec65f6672f748bb3407db01a22e14f947.

You can tell from the merge history that I was a little confused about `git cherry-pick`, so some of the commits look like mine - but I assure you, they're from @alesliehughes!