def read(name, field = nil)
      field ||= self.field
      
      if name.is_a?(Integer)
        field.read_field(name)
      elsif bits = @field_list[name]
        field.read_field(bits)
      end
    end
def read(name, field = nil)
      field ||= self.field
      
      if name.is_a?(Integer)
        field.read_field(name)
      elsif bits = @field_list[name]
        field.read_field(bits)
      end
    end
Read a field or bit from its bit index or name

 @param [Symbol, Integer] name either the name of the bit (a key in field_list)
   or a integer bit position
 @param [BitField optional] field a specific BitField to read from.
   default: return value of #field

 @example Read bit values
   # The struct is just an example, normally you would define a new class
   Example = Struct.new('Example', :flags)
   exo = Example.new(9)
   bits = Bits.new(exo, {:is_odd => 0, :amount => [1, 2, 3], :is_cool => 4})
   bits.read(:is_odd) #=> 1
   bits.read(:amount) #=> 4
   bits.read(:is_cool) #=> 0
   bits.read(:amount, BitField.new(78)) #=> 7
   # Bonus: aliased as []
   bits[:is_odd] #=> 1

 @return [Integer] a value of the bit (0 or 1) or bits (number from 0 to
   (2**bit_length) - 1) or nil if the field name is not in the list