Support for assertions and singleton checks

This pull request adds two features to REEF:

**(1) Support for assertions**

We now propagate the assertion state (enabled / disabled) from one JVM to another.

 * Used it in `JavaLaunchCommandBuilder` to propagate the assertions to subprocesses. Also added code there to allow users to override this automatism.
 * Added `EnvironmentUtils.areAssertionsEnabled()`
 * Added a log statement to `Launcher` about the assertion state

**(2) Support for singleton checks**
 * Added the helper class `SingletonAsserter` that allows checking for the singleton property of a class. Also added a test for it
 * Added an assert to make sure Evaluators is a singleton
minor refactoring of the assertion logic