introduce ABCMeta for Target and Task.

Task's metaclass inherits ABCMeta and Target uses ABCMeta as its
metaclass. This lets you define abstract targets and tasks that
can't be instantiated directly.

I have a few simple tests to demonstrate the expected usage and
to make sure that things still work ok.

Open question: Does it make sense for Target.open() to exist? It
only seems to be applicable to HDFS and File Targets (maybe an
OpenableTarget interface?). Or should we leave it without the
@abstractmethod annotation.
Merge pull request #32 from jcrobak/abcmeta

introduce ABCMeta for Target and Task.