Add lifecycle bindings for providers.

This allows objects returned from arbitrary providers to participate in the lifecycle
and have their @PostConstruct and @PreDestroy methods called.

Also fixes a couple of issues in the LifeCycleManager where @PostConstruct and @PreDestroy
methods were called multiple times.