Closes #1611 - DataFrame Register and Attach Functionality
This PR closes #1611
Adds the basic register and attach capabilities to DataFrame:
register(name)
attach(name)
unregister()
is_registered()
unregister_dataframe_by_name(name)
Also adds .objtype property to SegArray to support using the objtype to distinguish between potential column types in the DataFrame to ensure proper rebuilding.
Most of this should be fairly straight forward, the only little "trick" that I had to do was in the attach function. In order to preserve the order of columns within the DataFrame I register the dataframe.columns property with the DataFrame and use that list to create a dictionary with the proper keys and empty values. The values are then parsed through the names of the registered column data and assigned to their respective location in the dictionary. This prevents index misalignment issues and allows the original DataFrame and newly attached DataFrame to evaluate to equal.