Separated blocks into their own package.

Although blocks were originally a component of the execution package,
they play an important role both in the parser and as an intermediate
representation in their own right. This separates them into their own
package in src/block and does the same for block tests.
Made file expands require a specified root_dir

This made it necessary to add this constraint to block expansion as
well. Includes updates to the unit tests to accept this behavior.
Fixed path expansion with vars in relative paths.

There was a standing bug in which a relative path that contained a
variable was expanded before variable substitution. The code is now
cleaner so that this is no longer a possibility.
Merge branch 'feature/refactor/block-package' into dev