improve formulas and revive tests

This implements a couple of missing features for formulas, most notably three-way and higher interactions and proper handling of associative and distributive properties of the :+ and :& operators (open to suggestions on how to improve any of these).  It also restores the formula tests, removing tests for features that were previously purged and updating the remaining tests to use the up-to-date DataFrames interface.