Add gradle script, K2Exception and i18n framework

Ignore previous request; missed committing a change on one of the files.
It's a bit more testable to not have static initializers. Similarly would be more testable to have the Messages class take the Locale and the BUNDLE_NAME as args to the constructor.

Also, having all of the methods be static is hard to test. Many people try to write test code that checks the exceptions text of a message.  It's bad form (exception texts shouldn't be part of your contract since they are regional, likely to be changed to clarify things, etc) but people do it.  However, in this case I could see someone working with a subclass of Messages which just puts the message ID in the message (instead of the text), and then it's a bit more reasonable to test.

I'd rather see this as part of a K2Context object that gets passed around to everyone.  Injection frameworks like guide make this a bit easier, but I don't think we want to go there at this point - that's too heavyweight. But I think it's best just to put the few things that almost every object will need (Messages, Logger, Monitoring, Auditing, PluginRegistry) into some common object that every object gets when they get created.

Then all of these can be instance methods instead of static, which makes it easier to test both the code in this class, and (more importantly) the code in classes that depend on it. (Particularly if there is a TestK2Context in the tests tree that all the tests can just make and use).