Feature/reporter

This class could be a private class for the API. I don't like the idea to leave it in public because it says that people could use it directly, but it was not the purpose to create it manually.
A solution could be:
`
trait Reporter {
  def attach(monitor: Monitor): Reporter
  def detach(monitor: Monitor): Reporter
}

class API {
  class InnerReporter(...) extends Reporter {
    ...
  }
}
`