Oh boy I have seen this case so much... In my case, I live in Peru, and most carriers and cellular plans here have a limitation to send SMS just locally, not worldwide. iMessage activation requires that the phone sends an SMS to servers on UK (I don't know why), so the limitation blocks it and the phone stays forever on the "Waiting activation" screen.
The solution (for this situations, at least) is to buy some prepaid charge for the phone number. The prepaid ammount have no restrictions and can be used to call or send SMS worldwide, so it just takes another try disabling and enabling the iMessage service and this time it will work. It does take a couple of minutes on activating it, though.
Please keep in mind that this might be a country/carrier-specific-solution, but overall, you get the idea.