Warning suppression:
* Add a flag to UsageWarning to mark a warning as "suppressed"
* Enumerate the warnings used by the typechecker
* When adding a warning to a Node, pass the enumerated warning type in addition to the message
* Add WarningSuppressionVisitor which will flag warnings which are suppressed
  by either being in some set of suppressed warnings passed to the PhasedUnit
  (i.e. configured from the command line) or which are suppressed in the
  source code by use of the new suppressWarnings annotation.

See ceylon/ceylon-compiler#1866