Chapter 3 - Recipe #6: Controlling phase change in concurrent phased tasks - extending Phaser