A partial rewrite of java.vim

Works the same way as before, using cindent() for most indenting and handling Java-specific cases.
Handles some edge cases better, like methods which have annotations and "throws" statements.
Improves readability by breaking out reusable bits like line-matching regexes into individual functions.