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.

There was a discussion about this in https://github.com/spotify/luigi/issues/18 Hoping for feedback on some of the issues discussed above.