[core] Split BaseObject into BaseObject and Entity

BaseObjects are all objects that read and write to the _data dict
and have a raw_data property to access said dict.
Entity are objects that have an uuid, such as Abstract, Figure, and
Owner.
[core.Abstract] remove __data instead use BaseObject's _data
[Abstract.core] Add setter for various properties
[core] Make data param for object constructors optional
[core.Affiliation] getter and setter for fields
[core.Author] setter for name fields
[core.Abstract] setter for references, authors, affiliations