This patch adds a checker that utilizes the information that was collected by DynamicTypePropagation and warns when the static type contradicts the dynamic type.
This checker also replaces the AST matching logic in ObjCGenericsChecker's return type checking which was error prone and fragile. As a positive side effect this change also reduced the false negative cases.