Currently, the BufferInterface encapsulates all the kinds of client buffers. This has become a somewhat annoying issue as we want to reference the shm pool if a shm buffer is destroyed, or have custom buffer readiness logic for linux dma-buf client buffers.
Implementing all of that with the current abstractions will be challenging as there's no good separation between different client buffer types.
This change splits the BufferInterface class in three sub-classes - DrmClientBuffer, LinuxDmaBufV1ClientBuffer, and SharedMemoryClientBuffer
In addition to that, this change fixes the broken buffer ref'ing api.