Allocate different ComponentId for lib and exe.
In the old code, we assumed that only libraries could get installed, but with executable dependencies this is no longer true. Handle it correctly. This bug caused cycles in the elaborated install plan which could cause dependency closure to fail, resulting in weird errors. Fixes #3996. Signed-off-by: Edward Z. Yang <email@example.com>