function createAttribsFromArrays(gl, arrays) {
    var attribs = {};
    Object.keys(arrays).forEach(function(arrayName) {
      if (!isIndices(arrayName)) {
        var array = arrays[arrayName];
        var attribName = array.attrib || array.name || array.attribName || (defaults.attribPrefix + arrayName);
        var typedArray = makeTypedArray(array, arrayName);
        attribs[attribName] = {
          buffer:        createBufferFromTypedArray(gl, typedArray, undefined, array.drawType),
          numComponents: getNumComponents(array, arrayName),
          type:          typedArrays.getGLTypeForTypedArray(typedArray),
          normalize:     array.normalize !== undefined ? array.normalize : getNormalizationForTypedArray(typedArray),
          stride:        array.stride || 0,
          offset:        array.offset || 0,
          drawType:      array.drawType,
        };
      }
    });
    return attribs;
  }
Creates a set of attribute data and WebGLBuffers from set of arrays

Given

     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],                 },
       normal:   { numComponents: 3, data: [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1],     },
       color:    { numComponents: 4, data: [255, 255, 255, 255, 255, 0, 0, 255, 0, 0, 255, 255], type: Uint8Array, },
       indices:  { numComponents: 3, data: [0, 1, 2, 1, 2, 3],                       },
     };

returns something like

     var attribs = {
       position: { numComponents: 3, type: gl.FLOAT,         normalize: false, buffer: WebGLBuffer, },
       texcoord: { numComponents: 2, type: gl.FLOAT,         normalize: false, buffer: WebGLBuffer, },
       normal:   { numComponents: 3, type: gl.FLOAT,         normalize: false, buffer: WebGLBuffer, },
       color:    { numComponents: 4, type: gl.UNSIGNED_BYTE, normalize: true,  buffer: WebGLBuffer, },
     };

notes:

*   Arrays can take various forms

    Bare JavaScript Arrays

        var arrays = {
           position: [-1, 1, 0],
           normal: [0, 1, 0],
           ...
        }

    Bare TypedArrays

        var arrays = {
           position: new Float32Array([-1, 1, 0]),
           color: new Uint8Array([255, 128, 64, 255]),
           ...
        }

*   Will guess at `numComponents` if not specified based on name.

    If `coord` is in the name assumes `numComponents = 2`

    If `color` is in the name assumes `numComponents = 4`

    otherwise assumes `numComponents = 3`

@param {WebGLRenderingContext} gl The webgl rendering context.
@param {module:twgl.Arrays} arrays The arrays
@return {Object.<string, module:twgl.AttribInfo>} the attribs
@memberOf module:twgl/attributes