Speed up evaluation of composite columns

Use a ProxyMetadata object that lazily evaluates its fields on demand,
thereby avoiding the overhead of get_metadata() on every composite field
evaluation.