Refactoring and cleanup

- Updated the build system to check for support of C++11 template aliases.
- Updated the program variable (uniform) typechecking.
- Added the Optional<ProgVar<...>> modifier specialization.
- Added the Typechecked<ProgVar> modifier.
- Work-in-progress, some parts won't compile.