session: fix wrong error exit status for server threads for non-recursive file listings

https://github.com/perlundq/yajsync/issues/5
- fix issue where server exits with an error if doing a non-recursive
  file listing.
- fix issue where we would not exit with an error for non-existing
  modules.
session: replace SocketChannel with ReadableByteChannel and WritableByteChannel

code cleanup in preparation for a possible SSL channel implementation
build: fix ant test which does not work with ant version 1.9

ant 1.9 + external junit4.jar does not work:
   ...snip...
   test:
       [junit] Running com.github.perlundq.yajsync.session.IntegerCoderTest
       [junit] Testsuite: com.github.perlundq.yajsync.session.IntegerCoderTest
       [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
       [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
       [junit]
       [junit]     Caused an ERROR
       [junit] junit/framework/JUnit4TestAdapterCache
       [junit] java.lang.NoClassDefFoundError: junit/framework/JUnit4TestAdapterCache
   ...snip...

Fixed by enabling fork for the ant junit task. Tested with ant 1.8 and
ant 1.9.

See also:
http://ant.apache.org/manual/Tasks/junit.html
https://github.com/real-logic/simple-binary-encoding/issues/96
cleanup: delete all carriage returns and trailing whitespace

Note: cosmetic whitespace changes only.
add short description on how to contribute to this project
fix minor layout issue in markdown syntax for CONTRIBUTING.md
fix issue #9: failing to set correct posix permissions

fixes https://github.com/perlundq/yajsync/issues/9

detect if we support POSIX file permissions and if so use
PosixFileAttributes instead of BasicFileAttributes to correctly
determine the current permissions. Use this information in the
Receiver to update the permissions if necessary.
fix issue #8: failing to copy single source to single dest

fixes https://github.com/perlundq/yajsync/issues/8

this adds support for the following operations:
   file          -> non_existing      == non_existing
   file          -> existing_file     == existing_file
   *             -> existing_dir      == existing_dir/*
   *             -> non_existing      == non_existing/*
   *             -> existing_not_dir/ == fail
   *             -> existing_other    == fail
   file_a file_b -> existing_not_dir  == fail
   -r dir_a      -> existing_not_dir  == fail

Note: one special side effect of rsync is that it treats empty dirs
specially (due to giving importance to the total amount of files in
the _two_ initial file lists), i.e.:

   $ mkdir empty_dir
   $ rsync -r empty_dir non_existing
   $ ls non_existing
   $ rsync -r empty_dir non_existing
   $ ls non_existing
   empty_dir

yajsync does not try to mimic this behaviour
fix issue #10: deadlock when a thread exits prematurely for a local rsync

fixes https://github.com/perlundq/yajsync/issues/10

properly close all channels being used by a thread at thread exit
fix issue #11: symlinks treated as files

fixes https://github.com/perlundq/yajsync/issues/11

don't follow symlinks when reading any file attributes
remove artificial restriction of path length

let the filesystem handle this instead
Fix issue #12: Sender throws IllegalArgumentException if source dir has only 1 component

Fixes https://github.com/perlundq/yajsync/issues/12

The bug was caused by wrongly assuming the namecount of / would be 1,
but in reality it is 0.

Additional changes: Always check at runtime that sub is a proper
subdirectory of parent. Remove restriction that parent must be an
absolute path.
update .gitignore
trivial code cleanup changes
use "unknown" file type for files that are "other" instead of throwing an IllegalStateException
rethrow EOFException as ChannelEOFException

this prevents some unnecessary stack traces if the peer has vanished
prematurely
Code refactoring of YajSyncClient and YajSyncServer

Note: no semantics are changed
Allow Sender to populate the filelist with any type of file

This allows file listings to succeed without errors even if there are
files of type "other". It is also compliant with rsync.
Throw RsyncProtocolException if server detects wildcards in initial file arguments

Wildcards are currently not support. This patch will prevent yajsync
from treating them literally.
fix potential NullPointerException

also remove one unused import