Implement version fallback in receiver class

If class doesn't implement the received version, try to fallback on the
closest, lower, defined receiver method.

Added a thin wrapper around version to stop doing s.split('_')
everywhere we need to handle major/minor