Add support for external functions

External functions let you define functions outside of the dentaku engine, so (a) we don't clutter up the core with functions which are specific to individual needs, and (b) we don't have to have PRs accepted to add custom functions.

For the specific use case that prompted this, I need to write a date function like Excel's DATEDIF. It required pulling two new gems, and I didn't see any reason those need to be dependencies in dentaku.

Only the last commit (cff41dd) is relevant; I think the others got picked up because I rebased my working branch.