Use SmartLifecycle instead of Lifecycle for Spring beans lifecycle management

Hello, Ryan.
I see you are using Spring `Lifecycle` interface to listen for container start/stop events. In some cases (e.g on context refresh) `Lifecycle#start` method will not be called by `DefaultLifecycleProcessor`, so `SmartLifecycle` seems more appropriate.

Please see `org.springframework.context.support.DefaultLifecycleProcessor#doStart`:

```java
if (!autoStartupOnly || (bean instanceof SmartLifecycle && ((SmartLifecycle) bean).isAutoStartup())) {
```

We can overcome this by implementing `SmartLifecycle` instead of `Lifecycle` with `isAutoStartup` method returning `true`.