Merge pull request #258 from trustmaster/master

Basement for request processing in WirePattern
Support for loading JSON from strings, refs noflo/noflo-ui#230
Graph: Add naive implementation of graph merge

Allows to merge a graph B into A, resolve it to equal B,
and then undo it to return to A using the Journal
Merge pull request #259 from jonnor/graph-merge

Graph: Add naive implementation of graph merge
Update CHANGES
Make ComponentLoader capable of handling errors, refs #260
Remove debug output
Add a test for non-working setSource, refs #260
Document ComponentLoader.load API change, refs #260
ComponentLoader: Load components on-demand in setSource also on node.js

Caused exception due to this.components being null when Flowhub
sent component:setsource message before the first component:component
message. Was already handled for noflo-browser.
Merge pull request #264 from jonnor/fix-setsource-exception

ComponentLoader: Load components on-demand in setSource also on node.js
Helpers: Fix array check not working for components loaded by setSource()

When the array comes from another JS context, as is the case when
using eval() in ComponentLoader.setSource() isinstance Array returns
false even if it is a proper array.
Merge pull request #265 from jonnor/fix-array-check

Helpers: Fix array check not working for components loaded by setSource(...
Modernize build deps
Make `Ports.add()` method chainable

Returning a collection on `add` / `remove` allows a shorter syntax
best illustrated by examples below:

```coffeescript
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'

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
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'

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'
```