Compile time validation and semantic naming of annotations

Notes:

I understand the deprecation is a big change to your API so I won't be offended if you just fix the bug in NotEmpty. I was always getting confused as to what each annotation did so I changed the names to match the BCL.

Changelog:

Added compile time validation of the param/return val types that contracts are applied to. This fixes a bug in NotEmpty which only checked for empty collection but allowed tests to pass for string also.

Deprecated NotEmpty and NotBlank contracts and replaced them with attributes that have names that are more semantically correct and consistent with the .NET BCL