Enable cancel()

Enable cancelation by changing DispatchBlock to a class and keeping a state as to whether it is cancelled.

Chained blocks get run as if the cancelled block completed as normal. Not sure yet if this matches Async behaviour. Will merge this when I have confirmed matching behaviour.