Refactoring, improvements and additions.

- Promises created by then: and rescue: fail in case the supplied block
  returns an NSError or the block raises an exception. That's now the
  behavior for all blocks that return a value.
- then: is now aware of number of parent promises and can thus
  calculate the progress. It assumes an equal distribution of work
  over all promises.
- Add missing unit tests.