This kind of functionality is useful to other project apart from clang.
LLDB works with version numbers a lot, but it does not have a convenient
abstraction for this. Moving this class to a lower level library allows
it to be freely used within LLDB.
The code is an identical copy of the version from clang (apart from
namespace change and re-clang-formatting).
I didn't find any tests specific for this class, so I wrote a couple of
quick ones for the more interesting bits of functionality.