Switch to using blocks within definition macro instead of block wrappers

 - Makes it easier to extend
Make definition builder slightly less verbose
DRY up unit tests