I haven't done any work to implement refinements myself, but I do know that basically it came down to something that you could write an inline cache against, guarded against the class version, so a simple word guard that you were doing anyway when you called any method.