Always convert table functions to wrapped DataFrames

It occurred to me that one of the benefits of table_source was that
it converted the registered thing to a DataFrameWrapper that allows
you to access the underlying DataFrame.

To keep the same benefit now that table_source is gone I've converted
the simulation framework so that the injection and get_table always
result in a wrapped DataFrame. This could result in a little more computation
while evaluating dependencies, but caching still works the same
so things that are cached will only be built once
(or until they are removed from the cache).