Rework bootstrapping compiler with runtime in build.xml

Do not pack the runtime into the compiler on the first step of bootstrap, but
rather leave it as a separate file.

This new solution will allow compiler to use its own classes from "core", not
the ones used by the runtime it depends on
Use abstract factory for reflection objects on JVM

Introduce an abstract factory class ReflectionFactory which is responsible for creating
reflection objects (KClass, KProperty, ...). The meaningful implementation is
located in "reflection.jvm" where KClassImpl/KPropertyImpl/... are accessible
and can be instantiated. The default implementation will be used in the lite
runtime with no reflection and will return nulls / throw exceptions there.

Put all functions, calls to which are generated by JVM back-end, in one place:
the class named Reflection which contains only static methods. Previously these
functions were scattered across different files in module "reflection.jvm".

The code using reflection may now be compiled against either runtime, but
reflection features will work if and only if reflection is accessible at
runtime
Drop unneeded factory methods

Either ReflectionFactory or direct creation is now used instead
Refactor CompilerRunnerUtil

Eliminate code duplication, add NotNull, make everything private, etc
Move ParentLastURLClassLoader from gradle plugin to compiler
Use parent-last class loader in IDE compiler runner

To be able to invoke the intermediate compiler built on the first step of
bootstrap: in contrast to the distributed compiler, it's incompatible with the
runtime produced by itself and should instead be run with the runtime in the
classpath which was used to compile it