material modules ver2 finished

- in isotropic, lamina, etc. material type modules, use logical variable
to indicate the presence of different category of variables (modulus,
strength, toughness)
- logical variables are by default false
- use update procedure to assign categories to the material type as
needed (e.g., only assigning modulus category without strength or
failure is possible)
- use intrinsic constructor to assign values to each category (all
values must be assigned at the same time)
- material module hosts all base types, and define a unified type called
'material', which contains only the material name from user, the base
type name, the index of this material in its base type's array.
Intrinsic constructor is used to assign values to this unified type so
that all three components must be assigned at the same time.
- each element will be assigned a key to the unified type array, and
using the unified type's components to then access the actual material
properties in the base type array.