Refactore RecordMacroState into Mode

Only commands or mode can hold state specific to the current editor
whereas State's need to be reusable for a number of editors. Refactoring
the macro record function allows us to keep the "single key to toggle"
yet still allow to accept input of the macro name.

Definitive fix for #495.