Introduce lightweight exceptions without stack trace

This pull request provides a more generic approach to the changes in #280.

Exceptions are expensive because filling in their stack traces is
expensive. If we use exceptions for control flow, we can avoid
filling stack traces that will never be used. This commit introduces
LightweightExceptions that do not provide a stack trace by default,
and rewrites existing exceptions that (conditionally) did not provide
stack traces into subclasses of LightweightException.
The likely-impending [Google Java style guide](https://google-styleguide.googlecode.com/svn/trunk/javaguide.html#s4.1.2-blocks-k-r-style) dictates no line break before the opening brace. If you care to, you could change it now, otherwise we can let the automated formatting get it once it hits.