Changes return value of id to instancetype

Uses the `instancetype` instead of vague `id`so that the Swift compiler can use these methods without ugly downcasting.
I'm not sure this is quite right. The type of the animation isn't the same as the object it's attached to.