implement if and while exprs, add tests

there has been an issue with matching if and while trees:
Block tree was always matching them first despite not being their parent