On a related note, I like the idea of a 'v' prefix for strings, such that v'1.0_a2' would return either a tuple (1, 0, 'a2') as exemplified in your post, or a value of type 'version'. I think this is a cute, concise way to support arbitrary version formats, but not generally useful enough to warrant the effort. There's also the problem of combinations with the existing string prefixes (do you just disallow them, or do 'vr', 'rv', 'vu', 'uv', 'uvr', 'urv', 'ruv', 'rvu', 'vur', and 'vru' become builtin identifiers).
Another option would be a builtin 'version' method (or type). version('1.0_a2') is quite clear, and probably not too verbose. Again, this could return either a tuple, or a value of type 'version'.