Moved set_signature to func_compiler and merged timing and error runs into one.

Now the timing is done with just time.time() rather than timeit, but I think
that there isn't much advantage to using timeit, since we were only doing one
run anyway. Informal testing suggests that the results are equivalent. The error
metric has also been changed from the mean of the RMSE over each instance to the
RMSE of all values over all instances, since the latter is slightly more
convenient to compute and (I think) makes at least as much sense.