Split SynTyCon to SynonymTyCon and FamilyTyCon

Summary: This patch splits `SynTyCon` data constructor of `TyCon` data type into `SynonymTyCon` and  `FamilyTyCon`. This is only refactoring. No new functionality added. This split will be very useful for the injective type families because we don't track injectivity for type synonyms and these two constructors will differ even more.

Test Plan: This patch validates cleanly. However, please carefully review my changes to representation of interface files, especially the `IfaceDeclExtras` data type. I constructed the new `IfaceSynonymExtras` and `IfaceFamilyExtras` data constructors mostly based on my intuition, not solid knowledge. I fear I might have accidentally violated some assumption I wasn't aware of.

Reviewers: simonpj, goldfire, austin

Subscribers: thomie, goldfire, carter

Differential Revision: https://phabricator.haskell.org/D508

GHC Trac Issues: #9812