Fix bug in WebSocketClient implementations
Enforce JDK version on CI server

Add a test to ensure that the CI server does not accidentally build
with the wrong JDK version.

Issue: SPR-10569
Release version 4.0.0.M1
Increment version to 4.0.0.BUILD-SNAPSHOT
Update README adding explicit JDK instructions
Clarify instructions for building from source

Re-order subsections to make it clear that running a full
`./gradlew build` is not necessary just to import projects
into your IDE or to build and install jars to your .m2 cache.
Mention JDK 8 in IDE import instructions
Merge pull request #288 from dsyer/patch-1

Update README adding explicit JDK instructions
Revise note on avoiding "lambda" JDK
Eliminate Gradle 1.6 deprecation warnings

Recently Spring framework build has been updated to use Gradle 1.6.
With the new version some of the Gradle APIs have been deprecated.
These deprecated APIs have been used by Spring build specific Gradle
plugins, which resulted in deprecation warnings in build output.

This patch changes Spring build specific Gradle plugins to use new
Gradle APIs instead of deprecated ones.

Even after this change build still produces warnings about Gradle
deprecated APIs being used. These come from Spring shared Gradle
plugins and other 3rd party Gradle plugins in use, like Gradle
Artifactory Plugin (GAP), which are still not updated to Gradle 1.6.
Related tickets for updating of these plugins to Gradle 1.6 are
GRADLE-53 and GAP-144, and once they get resolved Spring framework
build should further be updated.

Issue: SPR-10572
Fix MergePlugin

The submitted pull requests for SPR-10572 did not build.

This commit fixes the MergePlugin to create from configurations rather
than the project. It also removes unnecessarily added code that was
commented out.

Issue: SPR-10572
Fix minor typo in README.md
Instruct contributors to branch from master
Make CommandLinePropertySource enumerable

JOpt 4.4 has enumerable options, so this change can be made
if we upgrade. The only awkward thing is that JOpt allows
aliases for options, so we have to pick one to avoid double
counting. This implementation picks the last one in the list
which is the alphebtically last of the long options, if there
are any (e.g. "o1", "option1" returns "option1"). Most of the
time there will only be one or two aliases for each option so
it won't matter.

Issue: SPR-10579
Polish pull request #291 per committer guidelines

 - Update Apache license headers
 - Remove trailing whitespace
 - Edit original commit comment to use 'Issue:' syntax
 - Revert use of diamond operator (<>) in main sources

See committer guidelines at
https://github.com/SpringSource/spring-framework/blob/master/CONTRIBUTING.md

Issue: SPR-10579
Merge pull request #291 from dsyer/10579

# By Chris Beams (1) and Dave Syer (1)
* SPR-10579:
  Polish pull request #291 per committer guidelines
  Make CommandLinePropertySource enumerable
Fixed typo in docbook id

Issue: SPR-10394
Upgrade javax.websocket and tyrus dependencies to 1.0
Do not consider all @Components as configuration

Update ConfigurationClassUtils to only consider beans with @Bean
methods as 'lite' configuration candidates.

Prior to this commit all @Component beans were considered 'lite'
configuration candidates which could result in a large number of
ConfigurationClass instance being created that would ultimately be
ignored.

Issue: SPR-10609
Update @Conditional processing logic

Defer @Conditional processing on @Configuration classes until the bean
definitions are loaded, rather than when the @Configuration class is
parsed. This provides better support for @Conditional implementations
that inspect on bean definitions.

This commit also fixes some minor problems with original implementation
and replaces the ConditionalAnnotationHelper class with
ConditionEvaluator.

Issue: SPR-10534

Polish @Conditional

- Defer @Configuration conditional processing until as late as possible
- Refactor ConditionalAnnotationHelper

Issue: