I'll give my two cents since I recently started working with ARM micros both professionally and for hobby use only a few years ago.
First of all regarding compilers: I really think GNU GCC is being underrated here.
There's a reason why all the major vendors recently are switching to GCC (most recently Freescale with Kinetis Design Studio) or at least including extensive GNU GCC support. The recent advances with the nanolibc are really good and so far I've not come across a compiler problem that I couldn't solve with a few Google searches.
At work we used NXP LPC parts and the cumbersome LPCXpresso IDE (eclipse based) but now we're using CodeBlocks in combination with openOCD after we were quite tired and annoyed with LPCXpresso, the code size limitation and the non-compatible updates to higher versions.
At home I'm using mbed based controllers (mbed.org) such as the lpc1768 and the Kinetis L-range. Due to the portability I canreuse large parts of my existing code in both the lower end (Cortex-M0+) and the higher end (Cortex-M4).
I use mbed with my offline GNU GCC based toolchain a busblaster from DangerousPrototypes (a collegue has an Olimex programmer) and openOCD.
In the end with those mbed boards and my offline toolchain with full debugging/programming capability I'm quite happy and can quickly change between vendors as well. And best of all (for me), everything is cross platform and open source.