Generalized projection function to allow actual projections

Conservatively find the subset of fields that is used in the projection expression.
Use this to limit the data coming back from the service.
Apply the actual projection on the way back.