Protect against ArrayIndexOutOfBoundsException

Update logic in AbstractAutowireCapableBeanFactory.predictBeanType to
protect against a ArrayIndexOutOfBoundsException.

Issue: SPR-10304
Protect against 'has not been resolved to a Class'

Update AbstractAutowireCapableBeanFactory.getTypeForFactoryBean to
check AbstractBeanDefinition.hasBeanClass() before calling
getBeanClass(). The protects against a 'Bean class name [<name>] has
not been resolved into an actual Class' IllegalStateException.

Issue: SPR-10304
Prototyping various improvements

- Improved annotation meta-data
- Support for @Conditional beans
- Hook methods for ConfigurationClassPostProcessor
Use @Conditional
Hide CNFE warnings if @Conditional