Using InitializableValue prudently. Currently, we use this to even store ...

... pointers to header bufs and locs that don't change and when data caching is disabled we don't release them. In this patch, we use InitializableValue only when we are caching data there. Each object is expected to do this, so higher level objects don't have to do this for lower level objects (Response doesn't need to wrap Headers in InitializableValue). Also we don't use InitializableValue for storing buf/loc pointers in this patch. This way we will release them regardless of data caching.