OpsLoggerFactory creates parent directories as needed
Add tests

Make it clear that OpsLoggerTestDouble will catch format
strings that don't make any sense (such as "%++d"), even if
they are called with the correct number of arguments.
Code cleanup

* Add validateFormatString method to make it more explicit
what we are testing.

* Refactor signatures of methods so that the format string
is passed in instead of the message object
OpsLoggerTestDouble instances can't be closed

OpsLogger instances should almost never be closed by the
classes that log messages. Instead, the instances (which
should be singletons) should be closed by the IoC container
(aka Spring, Guice, etc) when the object graph is closed down.

OpsLoggerTestDouble throws an IllegalStateException when
close() is called to encourage the correct behaviour in app
code that performs logging.