refactor($q): make $q Promises A+ v1.1 compilant

Refactor to make $q Promises A+ v1.1 compilant
I don't think so, because no other promise implementation does this. We don't care if some 3rd party thenable is implemented wrong, we simply don't invoke the handlers if we've already invoked them