function getter () {
      return self.raw[i]
    }
Defines properties on a `Object`. It make the assumption that underlying data is binary.
@param {Object} self the `Object` to define properties on
@param {Array} fields an array fields to define. Fields can contain:
* `name` - the name of the properties
* `length` - the number of bytes the field can have
* `allowLess` - if the field can be less than the length
* `allowEmpty`
@param {*} data data to be validated against the definitions