Adds RuntimePropertyRegistry for runtime rebinding.

The RuntimePropertyRegistry is necessary because runtime rebinding
depends on the execution of condition checks embedded in rebind rules,
and these condition checks depend on property value lookups which it
provides.

Runtime rebinding is needed for separate compilation since static
compile time rebinding is only possible when in possession of complete
global knowledge and thus can only be done in monolithic compiles.

Separate compilation is wanted because it makes things faster by
reducing the amount of work necessary when only a couple of files
have changed and also by making it possible to run some work in
parallel.

Change-Id: I5f688e679a1dab2fa95f6a451a779b7201aee93d
7 files changed