I'm trying to understand why we need this trait.
Couldn't we just have this be:

    trait Buffer {
      // ...
    }

and rename `BufferAccessInner` to just `Access`.
The `IndexBuffer` would then be:

    class IndexBuffer extends Buffer {
      object access extends IndexBufferAccess
      trait IndexBufferAccess extends Access { /* ... */ }
    }

And similar for vertex, texture and transform feedback buffers?