integration refactoring

Actually to make it immutable, you have to create a new object from existing one, instead of setting one of the properties. Here is some example usage:

```java
Token expiring = token.expiresOn(expirationDate); 
```

where method definition is:
```java
 public Token expiresOn(Date expirationTime) {
     return new Token(value, type, expirationTime)
 }
```