Implement One-Off contributions

With this patch series, support for one-off payments is pretty much at parity with recurring payments -- i.e. in general, everything that works for RCUR should also work for OOFF. It doesn't touch most deprecated or broken stuff, nor some obscure bits of functionality I'm not sure what they are useful for. (I did try to handle everything that might cause regressions, though.)