Initial version of support for transitive dependencies

Added simple constraint solver for transitive dependencies, rewrote Get.Install to accommodate all necessary changes in other parts.
Prefer this style:

```haskell
data LibraryInfo = LibraryInfo
    { name :: String
    , summary :: String
    , versions :: [V.Version]
    } deriving (Show, Generic)
```

Easy to rename things without causing cascading changes.