Notifications System core

Following https://issues.cask.co/browse/CDAP-849 jira and design doc.
Build is running at https://builds.cask.co/browse/CDAP-DUT320-3.
Oh okay, so I could do that in the ``InMemoryNotificationService`` implementation, because it's fine to use the same thread to push notifications to handlers. But in the ``KafkaNotificationService``, using the same thread to poll messages from Kafka would be an operation that would never return, and no one could cancel it. Also, I rely on Twill's ``KafkaConsumer`` and it doesn't provide the capability to use another executor in which Kafka's polling is performed.