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

Refactor to make $q Promises A+ v1.1 compilant
we need this, the case is the following:

given `promise1`, we resolve it with `evilPromise`. Now `promise` is locked to `evilPromise`
`evilPromise` calls the `resolve` function with `promise2`.  Now `promise1` is in locked state to `promise2`
`evilPromise` calls the `resolve` function once again with a value


Now, we need to know how to ignore this second call and this is why we need the `callOnce` wrap