more graceful handling of cache invalidation

when an MBML function signature changes, the cache
needs to be invalidated

this new code avoids unnecessary invalidation and also
results in a more predictable cache filename (addresses IOS-1077)
change cache file loading as the environment loads

now that we have better cache invalidation logic, we can load
the cache before the environment loads, instead of after
bump MBDataEnvironment cocoapod version