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 
`invalid(reason, msg)` sounds good to me, maybe we can return a string here and then we add the message automatically to the error ?