Initial proposal for DeltaInstanceInfo

Having a String key - Object value pair is too loose an abstraction and forces to do the isSupported() kind of validations you are doing.

Can we follow netty's [`ChannelOption`](http://netty.io/4.0/api/io/netty/channel/ChannelOption.html) abstraction?
Which means we have Keys that forces the value to be of a certain type. To elaborate:

```java
public class InstanceInfoField<T> {

    protected InstanceInfoField() {
    }

    public static final InstanceInfoField<String> ID = new InstanceInfoField<String>();
    public static final InstanceInfoField<String> APPLICATION = new InstanceInfoField<String>();
    public static final InstanceInfoField<String> APPLICATION_GROUP = new InstanceInfoField<String>();
}

public class Delta {

    // Immutable object.
    
    static class Builder {

        <T> Builder withField(InstanceInfoField<T> field, T value) {
            // add field
            return this;
        }

        Delta build() {
            return new Delta();
        }
    }
}

```

This has two benefits:
- Forces types.
- Limits what fields can be added/updated.