[FEAT] Rewrite commit message validator
It converts the module wide functions into a class which acts as an iterator
which can internally store information. This allows each line check to
actually know "outside information" without the need of module wide variables,
like whether it is inside the footer or whether a change id already occurred.
This also converts all of the checks into yields, so that it is unnecessary to
manually create an error message. There also changes to the logic to make sure
that the line numbers are sequential.