Fix Monoid instances for ForeignLib & Executable
The Semigroup and Monoid instances for ForeignLib were completely
broken: for the `foreignLibVersionInfo` and `foreignLibVersionInfo`,
we essentially had the following:
mempty :: Maybe XYZ
mempty = Nothing
(<>) :: Maybe XYZ -> Maybe XYZ -> Maybe XYZ
_ <> b = b
which is obviously not a valid Monoid, as `Just x <> Nothing = Nothing`,
violating the identity law.
The Semigroup instance for Executable was also deeply suspicious, as
it combined the module paths, which makes no sense. Now we instead error
if the two module paths are different (and both nonempty).