Refactor

Started on settings and DSL's, here's 3 integrations -- this is just an example to get some crib and get back to work.

I tried picking 3 different integrations with different needs:

  - amplitude: the most simple one.
  - churnbee: requires `userId`
  - mixpanel: requires custom validation for `apiKey`.

Let me know what you think!, here are the relevant issues:

  - https://github.com/segmentio/integration/pull/25
  - https://github.com/segmentio/integration-tester/pull/19

> note: tests fail on travis because the tester is changed a bit, but tests for the 3 integrations are passing.

cc @calvinfo @gjohnson 
hmm, thinking about this some more, there must be reference to the message and settings in the layer above, so just `.invalid(reason)` is better, just to make error creation etc.. consistent.