Endpoints and Protocols

Added Endpoint and Protocols management:

* `IInternalClientProvider` and `IInternalAPIProvider` and their implementations have a `getPrococols()` method return an String array of valid protocols for this provider.
* `IClientProviderFactory` and `IAPIProviderFactory` and their implementations can receive optionally in their methods a new interface called `IEndpointSelectionStrategy` allowing to pass the logic to choose an `Endpoint` of the associated `IRootResource` with the given protocols. There is a `BasicEndpointSelectionStrategy` to be used as default strategy.
* Created `EndpointNotFoundException` to be launched when it was not possible to select and `Endpoint` given the array of protocols.
* Adapt examples and tests to make use of these new features.
* Bugs solved in `ApplicationInstance`.
Probably clearer to read if a variable would be initialized with the strategy to be used for the selection process, p.e.
`IEndpointStrategy strategy = endpointSelectionStrategy != null ? endpointSelectionStategy : new BasicEndpointSelectionStrategy()
Endpoint ep = strategy = endpointSelectionStrategy.select(...)`