Improve name of value definition
Fix some tests I had broken when pushing out the if/else support real quick

- Improved the internal API now that I had the time to think about it
Add a bunch of tests for some expected behaviour.

- Not sure yet about how to handle exceptions thrown inside of a top level expression or value definition
- A bunch of tests are failling right now, I will be fixing them in my upcoming commits
Implement exception handling for function definitions