Changing version semantics to be more readable

The Version class had hard to understand semantics when two versions were
compared against each other.

Sample of the new logic (which is simply the old logic inverted):
* V_0_20_0.before(V_0_90_0) => true
* V_0_90_0.after(V_0_20_0)  => true

Closes #3124