virt: New version Cartesian config.

Changes from old version:
 - Splits lexical analyze from syntax analyze.
    (not fully because speed optimization)
 - Makes parser more strict for easier work with configs.
 - Error message should be more concrete.
 - Adds new syntax features.
 - Adds optimization for generation of lots of variants.
 - Improve generating of huge number of variants.
       (almost 2 x faster than old version)  50s old -> 23s new

Disadvantage:
  Syntax analyze is more strict and takes 1/3 of time more
  for parse text. 220ms -> 320ms

New syntax features:
variants:
   - added metadata variants _name_ [default=aaa] [xxx] [yyy]:
     where:
        _name_           - Name of variants group.
        [default=aaa]    - Alternative for @. It raise error
                           if variant aaa missing in variants.
                         - It is possible add more [default=xxx]
                           but only first of them is expanded if
                           defaults is set.
        [xxx], [yyy]     - Another possible metadata for future.
   - default could be enabled and disabled. Generate only default variant.
        enable:
          cartesian_config.py -d
          Parser(..., ..., defaults=True, ...)
        disable:
          cartesian_config.py
          Parser(..., ..., defaults=False, ...)
   - default variant could be expanded by parser parameters.
        cartesian_config.py --expand _name1_,_name2_
        Parser(..., ..., ..., expand_defualts="_name1_, _name2_")

filters:
  - new examples
   only (guest_os=Fedora).15
   only (guest_os=Fedora)..(fedora_version=15)
   only (15)

   variants group "guest_os" and variant name "Fedora"

  - variants comparison is based on hash value
    instead of pure string comparison.

Signed-off-by: Jiří Župka <jzupka@redhat.com>