Replaced all functional interfaces with Java 8 interfaces.
Changed abstract classes to Java 8 interfaces