Support transforming with other data in the frame.

* Transformation lambdas must now specify three input parameters (this is
  unfriendly but will certainly do for the time being),
    * x  The datapoint(s) to be altered
            - A numpy array containing values for each observation for
              the given label or,
            - An individual datapoint if the specified function cannot
              be applied to an array
    * f  The DataFrame itself, allowing calls to `get` or numpy functions
    * i  The current observation index or None
            - None if the given function supports mathematical
              operations on arrays or,
            - The observation index to which to apply the specified
              function for the desired label
Test mixing array and scalar operations