Multiple changes

- Moved some of the preprocessor definitions from config.hpp
  to config_compiler.hpp.
- Moved the Optional<Object> modifier template to a separate
  header file.