Fix opaque data double free

There was many situations where a double free could occur in opaque data, where the free callback was used to free a talloc chunk.

This removes the free callback, and relies on the caller to set destructors to handle the freeing of opaque data correctly. This simplifies the code and removes the risk of double frees.

Opaque data can now only be used with talloc chunks.  If non talloc chunks are needed, they should be wrapped in a talloc pointer.