Implement BFTask Cancellation

Cancellation is provided by a token passed into the continuation methods, which check for the cancelled state before executing their blocks and return a cancelled BFTask if necessary, based on discussion from [#18](https://github.com/BoltsFramework/Bolts-iOS/issues/18)

Don't particularly like the multiple `with`s in the method signatures, but it seemed better to go follow the pattern of `continueWithExecutor:withBlock`/etc... really open to suggestions if you have something else you guys would prefer. 
One thing I was curious about and would love some help understanding for my own education is why `BFTask` creates a separate NSObject to use in its `@synchronized` blocks (the pattern I cargo-culted here). Is there a particular reason for doing this over just using `self` (as in `@synchronized(self)`) which seems like it would be less risky since its less likely to errantly be modified or released?