Return type improvements for class factory methods

* *b1237f9:* Replaced return type **id** for **instancetype**. Better type-inference for the compiler.
* *f9284c1:* Addressing the class name explicitly could potentially cause unexpected behavior when subclassing.