feat(library/definition_cache): store the hashcode of direct dependencies

Actually we store the has code of their types.
feat(library): add environment fingerprint
feat(*): use environment fingerprint to detect when the cache cannot be used because the configuration changed, closes #75

We are not taking into the account the options object yet.