What you're looking for is called "Permission Manager". While Android itself does not (yet?) provide such itself, there are several of them available, my list holds some of them.
There are different approaches. While some simply "deny access" (which might cause an app to crash, if the dev didn't take "revoked"/"not granted" permissions into account, and didn't place an exception handler for those cases), the majority rather replaces "real data" by "fake ones". Examples:
- network access: "we are currently offline"
- contacts, calendar: "the user has none" (empty list)
- IMEI: "0123456789" (sometimes a total random number on each call, but other times a random IMEI is generated after each boot)
- location: "not available" (location services deactivated) or "fake location" (e.g. north pole; some apps even allow to set your desired "fake location" and simulate movement in a specified radius)
A selection of popular "Permission managers" includes:
- PDroid/OpenPDroid: Effective, but hard to install. Both require root and deodexed ROM, AFAIK OpenPDroid is even limited to cyanogenmod
- LBE Privacy Guard: proprietary solution made in China, which might raise some eyebrows. Works great up to Android 4.0; don't install with higher versions as it will only stick your device in a boot-loop then. Root required.
- LBE Security Manager: Successor of Privacy Guard, works with all current Android versions. Playstore version is in Chinese only; patched versions are available at XDA for other languages. Some feel this one a little overloaded, as it wants to be an all-in-one security suite covering a lot of stuff not everybody needs. Root required.
- Xprivacy: A module to the Xposed framework. Gives very granular control, but other than LBE you cannot configure it to "ask everytime" whether access should be allowed (a feature I love about LBE). Root required.
- App Ops: With 4.3-jelly-bean, Android had some permission management integrated but hidden from the user. There are several "App Ops" front-ends available, not all of them require root. Not all of them keep working with 4.4-kitkat, though, where this feature was "better protected". Not that granular, but much better than nothing if your device is not rooted.
Above mentioned list holds several more, but these are the best known. I personally use LBE Privacy Guard on my devices running 4.0 or lower. No app ever crashed on me for "disabled permissions", so LBE IMHO uses the "fake permissions" approach. Same AFAIK applies to the other solutions I've mentioned here.