Use a factory method to create instances of the cache

Currently, it's not possible to use a custom implementation of
IEveLibCache without chaning the code in BaseEntity.
This will allow users to provide a custom factory method to use their
implementation if needed.