Correct peoples grammar

(yes, that title was intentional)

You must:

• Capitalise the first letter of each sentence, ie the first non-whitespace letter after any of .!? and, additionally, capitalise the first letter of the input
• Remove repeating punctuation, such as !!! -> !. Ellipses (...) are not special, and will collapse into ..
• Remove repeating whitespace <space><space><space> -> <space>
• Remove whitespace directly before any of .,;!? as in: Hello , World ! -> Hello, World!
• If there is no space directly after any of .,;!?, add it.
• Add a . at the end of the input if there is not any of .!? at the end.
• Not use Mathematica's builtins

Examples:

This is a  sentence .Unfortunately, it's not very grammatically correct.can you fix it ???
This is a sentence. Unfortunately, it's not very grammatically correct. Can you fix it?

buffalo, buffalo;buffalo   buffalo? Buffalo.buffalo Buffalo buffalo
Buffalo, buffalo; buffalo buffalo? Buffalo. Buffalo Buffalo buffalo.

i'm not sure what to put for this test case...
I'm not sure what to put for this test case.

!this is a test. .Can ...you . . . 'ear me Ground-Control? ?! 'ere as in what you do with you're [sic] ears !
! This is a test. Can. You. 'ear me Ground-Control?! 'ere as in what you do with you're [sic] ears!

• "what about this?", "(or this.)"? (I'm guessing "what about this? ". and (or this. )., which is a shame, but golf be golf...) – Jonathan Allan May 17 '17 at 18:52
• What are all the possible characters that can appear in the input? – user41805 May 17 '17 at 18:53
• Your last test case seems wrong, since nothing in the post says we need to remove repeated punctuation with whitespace inbetween. – James May 17 '17 at 19:57
• would rules number 5 and 6 clash and end up having a trailing output of <space>.<space>.<space>.<space>.<space>. – tuskiomi May 17 '17 at 20:26
• I like this challenge but I guess a better title might be "Correct peoples grammar according to the given rules". The rules are specific enough about what is required for me. If I am not misunderstanding, as long as the test cases are matched then the answer is valid. If my comment is grammatically incorrect then please feel free to use it as a further test case. – ElPedro May 17 '17 at 20:42

 *([.,;!? ])(\1| )*
$1 TlL[.!?].|^. ([.,;!?])(\w|')$1 $2 [^.!?]$
$&.  Try it online! This is my first Retina answer. -12 bytes thanks to @BusinessCat! -3 bytes thanks to @Neil. • I think you can replace \s with a literal space. OP said there won't ever be newlines and I'm assuming there won't be tabs either. – Business Cat May 17 '17 at 18:55 • There should be a space after punctuation like ; – user41805 May 17 '17 at 18:55 • Also ([^.!?])(?m:$) $1. -> [^.!?]$ \$&.. – Business Cat May 17 '17 at 18:58
• Ah. When you run all test cases at once it will. If you do one at a time it would be fine. You could also precede the line with % (which executes the stage on each line separately) instead of using the modifier. – Business Cat May 17 '17 at 19:14