Add convention for opting into stricter compile and enable it for model-core project.
Unify the late binding somewhat to avoid code duplication.

Might have to unpack this at some point for optimisation, but let's wait until we are measuring here.
added todo
Don't hang on to the on-fully-bound action after it has been fired so it and its dependents can be reclaimed.
Fully encapsulate ModelType's use of TypeToken.

ModelType will likely end up public so may as well avoid leaking Guava types now.
Add the failure exception itself, not its cause when running in process tests.

If the real exception thrown is a GradleException, it gets thrown as is.
Initial implementation of reporting on model rules that fail to bind.

It's not entirely accurate yet and the error output is insufficient.