Changes to the compile-time metaprog utils

- Added unpack_args and unpack_args_c.
- Added is_optional and is_nil_t.
- Added for_each.
- Updated/added test cases.
- Other minor changes.