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.
Usually when you are going to throw an exception (especially a checked exception), you don't log, as usually it is the one who catch exception do the logging so that it has stacktrace with it.