This patch avoids doing GetObjectInfo() in similar way how we did for PutOject().
This is written so that to simplify our handler code and provide a way to only update metadata instead of the data when source and destination in CopyObject request are same. Fixes #3316
Repeated code around both object layers are moved and combined into simple re-usable functions.