Module: Add statemachine pattern for building

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
travis: Add new JDKs

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
module: compile: phaseSync: sync on module ready

Modifying the phases so sync is only used when the module has fully
compiled and is ready for "ar" or "ld" to be used.

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
build: makefile: Add option for creating makefiles

To use this option, use --gen-makefile <makefile name>

This will go through the modules in similar fashion to the normal
command issuer, but instead of generating commands and sending them off
to the command runner, it generates target and makemodule objects and
generates a makefile at <makefile name> as specified.

The generated makefile won't have the ability to clean or configure.

Clean options might be added in later, but the configure option will
most likely remain optional to build itself.

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>
Build: Optimize the entire system

In many places, the Config.getInstance() has been replaced to point to a
class wide variable.

Similar tricks have been done with the CLI<type>.getInstance()
singletons.

In the command runner and CLI consumer/producer problems a wait and
notify system has been implemented to reduce waiting time.

Debug statements have been removed or wrapped in a if (getDebug)
statement.

Furthermore some string concatenations have been modified to use the
StringBuilder class.

Finally the CommandRunners now try to fetch the next instruction whilst
waiting on the currently running process.

All these tricks have reduced the running time to 1/3 of the original
time when used with Andromeda.

Signed-off-by: Bart Kuivenhoven <bemkuivenhoven@gmail.com>