Make operation truly concurrent.

This original operation might have returned `YES` for `isConcurrent`, but by the time `main` finished, you had already set the `finished` value. In that situation, it behaves like a non-concurrent operation (i.e. just checks `isFinished` getter when `main` is done, and if it returns `YES`, it terminates operation immediately, not worrying about KVN). But if you make this truly behave like a concurrent operation (i.e. return immediately, do additional stuff asynchronously, and set `finished` at a later point), you'll see why the custom `isFinished` KVN notification is critical.

As an aside, Apple generally puts the `isCancelled` check in `start`, so I put it there, but that's not really material to the real problem, that you didn't have this behave like a true concurrent/asynchronous operation.

I also changed the `finished`/`executing` properties to be `nonatomic`, so I could define custom setters.