Add symbolic branch constraints to execution tree

This commit contains a partial refactoring of the execution tree. This is mainly focused on the TraceBranch nodes.

- TraceUnexplored is now a singleton, since we only use it as a "constant" marker.
- Some ExecutionTree related files have been moved into the executiontree folder
- TraceBranch is now abstract, with the concrete classes TraceConcreteBranch and TraceSymbolicBranch as children
  - These new classes encapsulate their state, ensuring that all variables are properly initialized at any time.
Moved execution tree related files into the exectiontree folder