IR Event Handling

As discussed with @enebo and @subbuss, I designed and implemented a simple mechanism, to listen to events on  IR, CFG, ... changes/updates. To put it more in detail:
 * `IRScopeListener` listens to addInstr, when an (IR) Instruction is added to the IRScope
 * `IRScopeListener` keeps track of the `IRBuilder#build` method, so it adds a hook before building an (IR) Operand and a hook after building it
 * `InstructionsListener` abstracts over an `List<Instr>`, for instance a `BasicBlock`. It records all updates/adds/removals to the original list, to enable a fine granular diff mechanism

In addition:
 * fixed Imports for `IRScope`
 * add of `IRScope.equals(Object)` based on the `scopeId` field

If you need more information or I should update my PR, just ping me.