Incorporate ImmutableJS

OMG! Totes immutes!

This introduces the ImmutableJS library, converts the formatters over to Immutable structures and as a consequence removes the LoDash *flatten* function.

I also tried to replace *defaults* with merged maps but there is some subtly in the logic that I am missing.

I also attach the Immutable library to the scribe object so that plugins can make use of it.

## QA

 This doesn't change any functionality, just the way it is implemented. In theory it is a *genuine for-real refactoring* with passing tests.

However the way the formatters get registered has changed so it might be worth checking the default behaviour of the standard plugins and the external plugins may need to be rechecked as they get deployed.