Moved the various 'if dist is None' calls to the same indentation level

This way it is more clear that we're trying several things one after the
other. And it is nicer to read this way.
Clarified 'key': it is the package name
Logging what we're processing.

Often it is unclear why buildout takes a long time on something, this logger
statement might make it much clearer
Storing the found dist in the 'best' cache at the end

Whatever the method we used to find it, cache the result. Not just in one of
the cases. And it makes the method more readable as it doesn't mix functionality
Even clearer debug logging about the requirement and its constrained version
Removed version-unconstrained ws.by_key.get(), this finds too many
non-matching versions.

Ignoring version conflicts for buildout and setuptools, this enables
buildout/setuptools upgrades/downgrades after a bootstrap.
Moved the log statement around, it was too verbose in the previous location
Removed an 'else'
Updated changelog
Merge pull request #199 from reinout/reinout-fix-for-193

Fix for buildout 2.2.3 upgrade/downgrade problems