VersionNegotiation - 404 if no version is provided

The version negotiation middleware tries to identify the API version for
a specific url, and then perform routing. It also provides version info
if you attempt to reach "/versions". However, it also returns version
info if you attempt to reach any other endpoint that does not match a
version url.
The version negotiation middleware was modified in order to return all
the available versions of the api only when:
 1- No version is present in the URI and the Accept HTTP Header
 2- The request path is / or /versions
If the version is not provided and the request path is other than the
two mentioned earlier a 404 HTTP Code is returned.
If a version is provided the middleware strips the version from the URI and
pass the request to the next middleware/app.
Added a test suite to ensure that the Version Negotiation Middleware
work as expected.

Change-Id: I1dde1304de60533491790c33db7d2f74d3373722
Closes-Bug: #1251078
Merge "VersionNegotiation - 404 if no version is provided"