## Description
if, else, while, loop, all have some strange rules with regards to
handling blocks.
The block shortens the precedence of the control flow structure in a
way, so that
`if (cond) 0 else { 1 } + 2` is parsed as `(if (cond) 0 else { 1 }) + 2`
This PR applies the same rules for labeled blocks, so
`if (cond) 0 else 'a: { 1 } + 2` is parsed as `(if (cond) 0 else 'a: { 1
}) + 2`
## Test Plan
- New tests
---
If your changes are not user-facing and do not break anything, you can
skip the following section. Otherwise, please briefly describe what has
changed under the Release Notes section.
### Type of Change (Check all that apply)
- [ ] protocol change
- [ ] user-visible impact
- [ ] breaking change for a client SDKs
- [ ] breaking change for FNs (FN binary must upgrade)
- [ ] breaking change for validators or node operators (must upgrade
binaries)
- [ ] breaking change for on-chain data layout
- [ ] necessitate either a data wipe or data migration
### Release notes