Thread data kind syntax through the interface

  Things are not quite right at the moment.  The issue is that we can't
distinguish abstract types from types that are constructors in a data kind.
As such, we should introduce a new constructor to TyCon to help
disambiguate these two cases.  Also it might be nice to add a new TyCon
for kinds, which would avoid the need for a new RHS in the AlgTyCon case.