Added functional tests for the versioning scenario

This PR adds functional tests for implementing versioning using attribute routing following different approaches to validate that the scenarios are possible.
(5), (5], (5] are not supported. I detect these conditions after parsing the regex and throw in those cases. The regex makes easy to detect (lower boundary) (range) (higher boundary). After that I use custom logic to determine the type of boundary and range.

The regex does the heavy lifting of the parsing and I manually handle the individual boundary-range-boundary cases later. It's not worth making the regex more complicate to make it more strict and it's not worth doing the parsing by hand either as its much more work than just using the regex.

So the approach is, use the regex to detect (boundary)(range)(boundary) and then discard (5), (5] and [5) manually.