2.0.x definition decorators

This PR does two things:

 * Attempt to prevent ID conflicts with abstract services by removing "prototype" from their ID. There are still edge cases where certain index/type name combinations could overwrite another service, but we can't solve that without breaking BC. See my inline comments explaining those cases.
 * Create new definitions for each client configuration. This is preferable to #324, which would have broken the logger, and an alternative to the cloning done in #336.