Adds metaprogramming hooks for CPU registers
Changes describe to use varargs to allow unprotected commas.

The previous implementation of the describe macro would not allow commas to be unprotected inside of the block that was passed to it. Changing to var args allows this, which is far more common a scenario than someone abusing the macro by passing extra arguments.
Adds utility metadata programming functions for register manipulation