Fix memory management

This does a couple things:

* `GTObject` strongly references the repository since it might need it to get some of its properties.
* :fire: `GTObject` protocol :fire:
* `unsafe_unretained` => `weak`