Thanks for the patch. Basically looks good.
I have applied it as extensions/tenant module in the contrib section in Rev. 1407672 with a few modifications:
Moved the API to org.apache.sling.tenant and moved the implementation to org.apache.sling.tenant.impl
Stripped down the API to not provide an addition method. For now the API only allows reading tenant information so we should not support creating tenants. I also removed the TenantProvider.getTenantByName method. I am not sure, whether this is really usefull.
I am not sure about the TenantProvider.getTenants(String filter): Should this throw the InvalidSyntaxException ? Somehow this does not feel right.
To allow for the TenantAdapterFactory to make use of the tenant resolution without exposing implementation details through the API, the adapter factory is not a separate component but is created from the TenantProviderImpl and registered as a separate service. Maybe it would even make sense to combine them both in a single class.
As for tenant administration: I suggest you create a Web Console plugin which allows to create, modify and remove tenants and maybe pluggable support to configure tenants on creation.
And added the new module to the contrib reactor in Rev. 1407677.