Refactoring of lib/Sema/SemaExpr.cpp broken into several patches.  Changes include reducing code duplication, moving diagnostic checks into separate functions, and reducing method length.  Comments welcome.