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.
Unfortunately Java doesn't have a class like the guava `TypeToken`, which serves the purpose here. However, I think using `Type` in Java is ok.