Caching binary class headers

Plan:
* KotlinClassFinder implementations should cache KotlinJvmBinaryClass instances. This cache needs not to be big: normally a file is accessed a few times and then forgotten forever.
* KotlinJvmBinaryClass should, in turn, cache KotlinClassHeader instances
* The API of KotlinClassHeader may be improved: a combination of null-checks and instanceof checks is hardly a good API