function setBuffersAndAttributes(gl, programInfo, buffers) {
    if (buffers.vertexArrayObject) {
      gl.bindVertexArray(buffers.vertexArrayObject);
    } else {
      setAttributes(programInfo.attribSetters || programInfo, buffers.attribs);
      if (buffers.indices) {
        gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers.indices);
      }
    }
  }
Sets attributes and buffers including the `ELEMENT_ARRAY_BUFFER` if appropriate

Example:

    var programInfo = createProgramInfo(
        gl, ["some-vs", "some-fs");

    var arrays = {
      position: { numComponents: 3, data: [0, 0, 0, 10, 0, 0, 0, 10, 0, 10, 10, 0], },
      texcoord: { numComponents: 2, data: [0, 0, 0, 1, 1, 0, 1, 1],                 },
    };

    var bufferInfo = createBufferInfoFromArrays(gl, arrays);

    gl.useProgram(programInfo.program);

This will automatically bind the buffers AND set the
attributes.

    setBuffersAndAttributes(gl, programInfo, bufferInfo);

For the example above it is equivilent to

    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
    gl.enableVertexAttribArray(a_positionLocation);
    gl.vertexAttribPointer(a_positionLocation, 3, gl.FLOAT, false, 0, 0);
    gl.bindBuffer(gl.ARRAY_BUFFER, texcoordBuffer);
    gl.enableVertexAttribArray(a_texcoordLocation);
    gl.vertexAttribPointer(a_texcoordLocation, 4, gl.FLOAT, false, 0, 0);

@param {WebGLRenderingContext} gl A WebGLRenderingContext.
@param {(module:twgl.ProgramInfo|Object.<string, function>)} setters A `ProgramInfo` as returned from {@link module:twgl.createProgrmaInfo} or Attribute setters as returned from {@link module:twgl.createAttributeSetters}
@param {(module:twgl.BufferInfo|module:twgl.vertexArrayInfo)} buffers a `BufferInfo` as returned from {@link module:twgl.createBufferInfoFromArrays}.
  or a `VertexArrayInfo` as returned from {@link module:twgl.createVertexArrayInfo}
@memberOf module:twgl/programs