Better extensibility.

By using `static` instead of `self`, we ensure the user is able to extend this class while ensured to have the same behavior (here: the same promise class).