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:
* V_0_20_0.before(V_0_90_0) => true
* V_0_90_0.after(V_0_20_0)  => true

Closes #3124