Cherry-picked the :cacheable option from hmoore-r7.

I needed these changes to get warvox to work with current reportable, which in turn, I needed to work with other various updated gems that are no longer compatible with hmoore-r7's fork of reportable.  As far as I know these changes are harmless for anybody not using the :cacheable option.