CyanogenMod 7 supports this. It activated by going to
Settings->CyanogenMod Settings->Applications and checking "Permission management" as of the most recent build. You can then allow and disallow permissions by choosing an app from the app management list (
Settings->Applications->Manage applications). There is an article on endgaget with a Youtube demonstration.
Disclaimer: This may be obvious to some, but denying permissions to an app could have fairly crash-tastic consequences. Nonetheless, if you have a device that is supported by CM and you are willing to root and install it, you can enjoy permission-by-permission control (and any hazards that come with it).
In fact, due to the crashes that the permission management implementation tended to cause, it was removed from the CyanogenMod codebase in version 9. However, the most recent nightly builds of CyanogenMod 10.1 now include a feature that has been dubbed "Privacy Guard". Instead of blocking apps from accessing data that they request, Privacy Guard will provide them with blank data.
As an example, if an app running under Privacy Guard requests your contacts list, CM will simply return an empty list, causing the app to functionally believe that you don't have any contacts stored on your phone.