Aspect Refactor

Changed the way that attributes keep track of whether they are parts of
foreign keys and timeframes.
They now keep a set of the ForeignKeys they are associated with, curated
during the add/remove key pair functions of the ForeignKey itself. This
simplified some of the logic for figuring out if an attribute still had
the "foreign key aspect", since the attribute now simply checks if that
set is empty. The additional information of knowing which keys it is
associated with will eventually be used in the spreadsheet module to
provide hyperlinks between documents.
Attributes no longer keep track of the time frames  they are in, and
query the timeframe when necessary. One less thing to keep track of.

Also did some refactoring of ForeignKey, since it had some verbose code
that wasn't necessary any more.