VCHIQ: Fix mem leak of USER_SERVICE_T objects.

The userdata for VCHIQ services created through the ioctl API is
a kmalloced structure. These objects were getting leaked, most
notably in vchiq_release(), where the service could be closed,
freed and removed from the service list before the wait-to-die
loop was entered.

This change adds a userdata termination callback, and implements
it in the case where USER_SERVICE_T is used for the service
userdata.
vchiq_util: Fix race condition in push/pop

The lack of memory barriers could (very rarely) result in
vchiu_queue_pop reading the next value before it had been written
(getting either NULL, or a value that had been popped once already).