I'm afraid there is no quick way of executing such a major overhaul. The only thing you can do is reiterate on the single functionalities in an agile flow, but the time needed to complete the whole redesign will probably be massive anyway.
Since your legacy application is "somewhat modular", you could start by building a zf2 module each time you find yourself needing a single functionality of it. Nothing too fancy, just a basic test driven implementation that resembles the original behaviour, but this time you refactor the original code following SOLID principles and basic best practices. Initially, you would want to try and limit the amount of design decisions you have to make by using the simplest possible patterns for each module. You need to repeat yourself "Keep it simple" each time you make a design decision, even at the cost of sacrificing 1:1 functionality with the old code. Then, when the resources allow it, you can reiterate on those modules any time you want one of them to be improved, applying each time more efforts into the redesign, possibly even re-redesigning the modules themselves with fancier patterns; at that point applying design decisions should be much much easier and quicker because the foundations you'd have are meant to be maintainable and improvable. This way you can trigger a short release process for each module, giving you appreciable results quickly enough and maybe buy you some more time from your contractor. That's at least how I would do it. ;) Cheers, Stefano Torresi
