caps: avoid using in-place oprations
Rework some caps operations so they don't rely on writable caps but instead take ownership of the input caps and do _make_writable() only when needed. Remove some const from caps functions, it does not make much sense for refcounted objects and does not allow us to return a refcount to the const input caps. Rework the base classes fixate vmethods to not operate on the caps in-place. All this saves us around 30% of caps and structure copy and new operations.