Make `Ports.add()` method chainable

Returning a collection on `add` / `remove` allows a shorter syntax
best illustrated by examples below:

```coffeescript
# BEFORE
c.inPorts.add 'param1',
  datatype: 'string'
  required: true
c.inPorts.add 'param2',
  datatype: 'int'
  required: false
c.inPorts.add 'param3',
  datatype: 'int'
  required: true
  default: 0
c.inPorts.add 'data1',
  datatype: 'string'
c.inPorts.add 'data2',
  datatype: 'int'
c.outPorts.add 'out',
  datatype: 'object'
c.outPorts.add 'error',
  datatype: 'object'

# AFTER
c.inPorts.add 'param1',
  datatype: 'string'
  required: true
.add 'param2',
  datatype: 'int'
  required: false
.add 'param3',
  datatype: 'int'
  required: true
  default: 0
.add 'data1',
  datatype: 'string'
.add 'data2',
  datatype: 'int'
c.outPorts.add 'out',
  datatype: 'object'
.add 'error',
  datatype: 'object'
```

```coffeescript
# BEFORE
c.inPorts.add 'in', datatype: 'string'
c.inPorts.add 'message', datatype: 'string'
c.inPorts.add 'repository', datatype: 'string'
c.inPorts.add 'path', datatype: 'string'
c.inPorts.add 'token', datatype: 'string', (event, payload) ->
  c.token = payload if event is 'data'

# AFTER
c.inPorts.add 'in', datatype: 'string'
.add 'message', datatype: 'string'
.add 'repository', datatype: 'string'
.add 'path', datatype: 'string'
.add 'token', datatype: 'string', (event, payload) ->
  c.token = payload if event is 'data'
```