We need the extra flexibility for higher-order functions. Run-time loss is around 1% -- that's okay. [[Imported from SVN: r7836]]