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.
Actually, this is a bit trickier than just serializing the notification as a json string. The full kafka message is composed of a key, that is derived from the feed, and then the notification serialized as json. 
When the subscriber tries to decode the kafka message, it doesn't yet know from which feed the notification comes from - because a subscriber can subscribe to multiple feeds. Those feeds can receive notifications that have different types. So the deserialization has to happen in two steps. First, we extract the message key, which will give us the feed. Given the feed, we retrieve the ``NotificationHandler`` attached to it, and thus the Type of the notifications. Only then can we deserialize the json into a Notification object.