Extract formatter state to reporter

Replacement for #1512 this pulls formatter state into the reporter so it can be shared by all, hooray etc.