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

Refactor to make $q Promises A+ v1.1 compilant
There are tests that check that we don't invoke handlers more than once -- there is no test that says we implement the "callOnce" behaviour by creating more garbage, and none of the other promise implementations (which are aplus compliant) do this. It's confusing, and it's a silly thing to do