Add guard for dict return value of links

Sometimes the result of a `response.links.get` call is a dictionary,
probably due to a bug in the requests version we use. This patch adds the
necessary checks to compensate for this.
Don't instantinate a Model if attributes are empty in Foreign relation

Adds guard for scenarios where the `Foreign` relationship is passed an
empty set of properties for the target class.
Fix and generalize property updates and collision detection in Model
Make GitHub.Repo a top level class

GitHub recently made Repos top level classes that has their
own primary keys: `full_name`. This diff adopts that change
which also fixes some problems related to this.