I like that... we should probably move that to:

```
public interface Versioned {

    Version getVersion();
    
    public static class Predicates  {
        
        public static Predicate<Versioned> onOrAfter(final Version version) {
            return new Predicate<Versioned>() {
                @Override
                public boolean apply(Versioned versioned) {
                    return versioned.getVersion().onOrAfter(version);
                }
            };
        }
        ...
    }
}
```
then have StreamOutput/Input implement `Versioned` and then:

```
public void writeTo(StreamOutput out) throws IOException {
   ...
   out. writeOptionalStreamable(streamable, onOrAfter(Version.V_1_2_0)); // static import for Versioned.Predicates
}
```
clean & simple (the only downside, is that we're creating a bunch of temp objects... where we don't really need to, but there shouldn't be that many of those anyway)