Fix and improve CamelCaseFunctionNameSanitizer

This fixes a bug that occurs for steps with more than one capture group, for example
`Given I have "this" and "that"`
An attempt to sanitize the function name throws a `StringIndexOutOfBoundsException`.
I also improved the formatting for steps/function names that have acronyms and camel/pascal case words in them.

**Note:** This is a copy of https://github.com/cucumber/cucumber-jvm/pull/592 that I sent earlier, but from the wrong branch.