More work on breaking the donut abstraction up into simple manageable pieces.
Clean up ControllerAction and make it more serialization friendly.
Forgot to remove some cruft.
Let the AutoCacheItem contain Donut instead of IDonut.
Make IDonut immutable to avoid mistakes.