Fixed/simplified a couple of term combinators:
 - annotateWithPos
 - annotate
 - someSubtermDeep
 - equiv
 - variant
isNF
EqModulo instances for rules
Implemented Q-Narrowing
remove an unintended command import
Various changes

- Module reorganization
- More efficient normal form check
- The substitution type has now kind (* -> *). This allows to make it a Hask functor using the functor-normal-form trick. For consistency we ought to follow this approach for all the datatypes (e.g. MEnv) that have type variables which can be resolved via type families.
- Added fromId to the HasId type class
- Added HasId1 for type constructors. This is still a bit in flux
- The Match type class has been redefined. All that is needed to match two functors is the ability to check whether they have the same structure. This can always be done via equalBy(fmap (const ())), albeit inefficiently. Now it is possible for types to provide more efficient implementations, but for this is key to preserve the Match constraint in the types ! Otherwise the default instance will be resolved too early.
- Fixed Monoid instance for Signature
- Generalized several Rule instances (HasSignature, Family.Rule, GetFresh)
Dropped the Match class, Applicative is all you need.
Fix deprecated profiling option
Fast matching via term trees
NOTE: Non left-linear systems not supported yet
NOTE: Not tested yet
Made Substitutions observable
And added missing pragmas, constraints, instances, etc.
Added new dependencies
Fixed isNF and added observable term rewriting functions
gitignore
NFData instances
Follow changes in hoed, with the removal of the Observable1 => Observable instance