Fix de-serialization of ParametrizedTypes
Doc update
Raise when there is a Type without name
add ProductVariant.field method to retrieve field type by name
Fix RubyMine inspection warnings
Split the one big source file
Extracting serialization
Add BenevolentToHash serializer

to be able to parse loosely structured Hash-Array structures into
given Algebrick Types. E.g.

Person = Algebrick.type do |person|
  person::Name = type do |name|
    variants name::Normal   = type { fields String, String },
             name::AbNormal = type { fields String, String, String }
  end

  person::Address = type do |address|
    variants address::Homeless = atom, address
    fields street: String,
           zip:    Integer
  end

  fields name:    person::Name,
         address: person::Address
end

can be parsed from:
{ name: %w(a b), address: 'homeless' }
{ name: %w(a b c), address: 'homeless‘, metadata: :ignored }
{ name: %w(a b c), address: { street: 'asd', zip: 15 }
Add JSON serializer
TODOs update
cache ProductVariant.kind
Add License headers
Doc update
Allow Marshaling of Products
Add Boolean type definition
Add Type#match which restricts value to the type only
Add #update method to Products to construct new updated instances
ParametrizedType should be child of Type
Rename #generate and #parse serialization methods to #dump and #load
adding LinkedList type