Thread safe compound IRequestMapper. The mappers are searched depending on their
compatibility score and the orders they were registered. If two or more IRequestMappers
have the same compatibility score, the last registered mapper has highest priority.

mapRequest

Searches the registered IRequestMappers to find one that can map the Request.
Each registered IRequestMapper is asked to provide its compatibility score. Then the
mappers are asked to map the request in order depending on the provided compatibility
score.

The mapper with highest compatibility score which can map the request is returned.

getCompatibilityScore

The scope of the compound mapper is the highest score of the registered mappers.
Returns the score representing how compatible this request mapper is to processing the given
request. When a request comes in all mappers are scored and are tried in order from highest
score to lowest.

A good criteria for calculating the score is the number of matched url segments. For example
when there are two mappers for a mounted page, one mapped to /foo another to
/foo/bar and the incoming request URL is /foo/bar/baz, the mapping
to /foo/bar should probably handle the request first as it has matching segments
count of 2 while the first one has only matching segments count of 1.

Note that the method can return value greater then zero even if the mapper does not recognize
the request.