Use java 8 language features
This branch makes use of the diamond operator, lambdas and multi-catch wherever possible. The diff is rather large but nearly all of the changes were made automatically by Android Studio, with some manual reformatting.
Unlike !620 (merged), this branch will cause merge conflicts all over the place.