FileCollectionCodec.kt

Refactor serialization for instant execution cache so that property values are writen/read as `Provider` instances, and these provider instances connected in as the value of the property. This will allow providers whose value cannot be eagerly evaluated to be serialized differently to those whose value is known when serializing.

Serialize references to `WorkerExecutor` to the instant execution cache. Also serialize broken `Provider<T>` instances, in the same way that broken `FileCollection` instances are serialized. This is really just a work around, and we should instead offer ways to avoid writing these broken instances to the cache.