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 
we could have `this.error` add `this.settings` to it as well? still requires passing in the message though, but maybe something like this.error(reason, message).

I also go back and forth on it, but I think I prefer methods to passing in a `type` argument. maybe something like:

`this.invalid(reason, msg);`
`this.error(reason, msg);`