Introduces @HasNoSideEffects compiler hint.

This compiler hint can be used in cases where it is not
trivial for the compiler to detect that a method is side
effect free, hence can be removed if return value is not
used.

This is useful for removing precondtions related code when
preconditions are disabled. For example:

 @HasNoSideEffects
 private boolean someComplexMethodForCheckingArg(..) {
  ...
 }

 checkArgument(someComplexMethodForCheckingArg(arg));

In this example checkArgument will eventually get inlined and
will be no-op but if the someComplexMethodForCheckingArg is not
inlinable then the compiler will not be able to remove the call
to it as it might have side effects.

Even the compiler one day implements analysis to check side effect,
a lot of cases will still be uncovered because it is infeasible to
prove the underlying code will not throw if some arguments and 
method calls are involved.

As this hint is very unsafe, it is not provided as a public API.

Change-Id: I75c15939b0f274fa4540cbf12586db0e126cb316
Review-Link: https://gwt-review.googlesource.com/#/c/10264/