Rename ProcessorsSpec to eliminate conflict with the ProcessorSpec component.
Fixes #171. Moved the try/catch around the event routing for loop to just around the invokeConsumer call. Also had to wrap the completionConsumer with a try/catch and errorConsumer invocation. This meant the test had to change which means there are slightly different semantics now for how Consumers are invoked.

Previously, if a single Consumer among the List of Consumers registered to a Selector failed, then the for loop was broken. If it was a Throwable of some kind, the errorConsumer wasn't even called because those errors bubbled up. This change catches Throwable as well and pipes all errors through the errorConsumer so that Consumers in error get handled by the error Consumer but other Consumers that don't throw Exceptions can still be run, despite an error in another Consumer registered to that Selector.
Fix NPE in SslOptions when no keystoreFile is set (which means use the defaults).
The .jks files for use in the SSL test weren't included in the repo, so it's likely the CI tests were failing because of that. Added the .jks files to git and am testing the CI build for SSL tests.
Cancel the Timer in the Environment.shutdown() so a Java main program exits cleanly.
Add error consumer on event. Producer can now define its own error consumer and directly interact with any downstream issues instead of using the Reactor T(Throwable) notification.
Make Event child classes errorConsumer aware.
Remove callback() from Stream and move logic inside ReactorBuilder.
add final to ReactorBuilder constants
Tweak include in groovy environment to merge builders in a more efficient way
Fix visibility issue for ConsumerBeanPostProcessor inner classes. Extending classes can now deal with these types.
Fix rehydrate method in ReactorBuilder to add extensions and childNodes, plus override attribute to clear those
Extend ConsumerBeanPostProcessor properties visbility for child classes
Fighting this visibility issue...
Fixes #146, #172 Added a pair of awaitAndShutdown() methods to Dispatchers to gracefully shutdown the internal threads/threadpools/ringbuffers and wait for submitted tasks to complete. The method blocks until all tasks are complete then completes the orderly shutdown so no more tasks can be submitted to that Dispatcher.
Create a Boundary abstraction to which users can bind arbitrary Consumers. Calling the `bind(Consumer)` method returns a new Consumer that manages the internal state of calling the internal CountDownLatch after calling the delegate Consumer. This means you can bind an entire flow of Consumers to a Boundary and then block the calling thread until all bound Consumers have been called.

The `await(long, TimeUnit)` method will divide up the timeout among all the bound Consumers. e.g. if the total timeout specified is 5 seconds and the first Consumer takes 3 seconds to complete and the second one takes 2, the third Consumer will not have any time left in which to await, so the await method will timeout and return false.

No Consumers are cancelled by a Boundary. It is completely passive. It can be called multiple times, as well. If a Consumer has already been invoked, it will simply be skipped.
Changed from a BeanPostProcessor to an ApplicationListener for ContextRefreshedEvent events. It's possible the BeanPostProcessor was causing premature initialization in some cases, so the method of wiring annotated beans was changed to only happen when an ApplicationContext is refreshed, which should mean the beans are ready to be interrogated for handler methods.
Tweak how handlers are invoked and how selectors are created. Previously, the text of a @Selector annotation was parsed as SpEL blindly. For some types of selectors that's not desirable and creates errors in the parsing. Opened the try/catch to include all exceptions and, if the text can't be parsed as an expression, it's treated as a plain String.

Also had to include an if section in the invocation code to catch cases where the handler method uses an Event as the parameter type. This was previously being ignored and the object was being blindly unwrapped.
Fix synchronization issue with Grails.
Fix conversionService loading that could have been kicked too late.
Avoid creating non consumer beans
prevent NPE if type is null. Remove unused Environment