immutable env design

The premise is to move away from an app global, mutable and
non-atomic alterable implementation towards an immutable,
trackable implementation. Primary goal is the ease of reasoning.
Secondary goal is to provide a small api surface for configuration
handling in bazooka.

tl;dr
* control on instance level
* immutable
* configuration creation api
* atomic configuration changes
* reasoning about runtime behaviour

See doc/immtuable-env-design.md