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.
Better not to throw `RuntimeException`. It should be thrown as `NotificationException` so that caller can handle it just like a request failure.