Covariance & Contravariance for Generic Interfaces & Delegates in C# 4