OpsLoggerFactory is more symlink-friendly

OpsLoggerFactory will not create parent directories for a log
file if the immediate parent of the logfile is a symlink.

Similarly, OpsLoggerFactory will not create directories for
a stack trace storage path if the path is a symlink.

Creating directories for an existing symlink doesn't work
(it fails with a FileAlreadyExists exception, because symlinks
are *files* that link to directories), so we just assume that their
targets exist already.
Initial implementation of AsyncExecutor

AsyncExecutor will make code that uses a single background
thread much easier to test.
Initial implementation of AsyncOpsLogger
Cleanup

Inline a method parameter based on a constant
Code cleanup
Rename to OutputStreamDestination
OutputStream destination is also an async destination

Implements BasicOpsLogger.Destination and
AsyncOpsLogger.Destination, since there is no special
handling needed for writing batches to a PrintStream.
Add package level accessor methods to test factories
Extract createMockPath to a utility class
Add FileChannelProvider

* Extract common test methods to FileChannelProviders
to AbstractFileChannelProviderTest.

* Remove MockPathUtils, and move createMockPath() to
AbstractFileChannelProviderTest

* Add an additional test method to determine if a Writer is
open via reflection. Beefed up several tests to check that
Writers are open or closed.
Initial revision of AsyncPathDestination
Replace Thread.yield with CountDownLatch

This makes multi-threaded tests more reliable on multiple
platforms.
Add a time limit waiting for the CountDownLatch

When the test fails, it will fail in five seconds, instead of
executing forever.
OpsLoggerFactory creates AsyncOpsLoggers when required

Calling setAsync(true) causes an asynchronous logger to be
created. Calling setAsync(false) causes a synchronous logger
 to be built. The default is false.
Merge branch 'master' into logrotate-test

Conflicts:
	library/src/main/java/com/equalexperts/logging/OpsLoggerFactory.java
Log as fast a possible to provoke an error
BasicOpsLogger is completely logrotate safe at the expense of performance.

 Open and close locks and file handles every time the file is
 written to.
Merge branch 'master' into logrotate-test