clean up sfepy/terms/terms.py
use new get_arg_kinds() in Term.classify_args() - simplify code

- new Term._check_variables()
fix Struct._str() for classes with overloaded .get() (e.g. Term)
update Term.classify_args() to support 'mode' attribute
update Term to support arg_shapes and geometries attributes
new tests/test_term_call_modes.py to automatically test (almost) all terms

- skips terms with an empty arg_shapes attribute
- new make_term_args()
- new Test.from_conf(), .test_term_call_modes(), ._test_single_term()
define arg_shapes attributes of terms, part 1
fix docstrings of SDLinearElasticTerm, StokesTerm, GradTerm, DivTerm
fix several terms

- fix NSOFSurfMinDPressDiffTerm, DiffusionTerm, DiffusionCoupling,
  PiezoCouplingTerm
update Term.get() to accept integration argument
fix SDSufaceNormalDotTerm
fix Term.call_function() to clear C errors properly
fix SufaceNormalDotTerm

- make material shape (D, 1) to be compatible with SDSufaceNormalDotTerm
define arg_shapes attributes of terms, part 2
fix docstrings of VectorDotGradScalarTerm, TLMembraneTerm
fix ScalarDotGradIScalarTerm - add vector mode
new fmf_mulATC()
fix dw_v_dot_grad_s_sw() (VectorDotGradScalarTerm)
fix and update DeformationGradientTerm

- rename dq_def_grad -> ev_def_grad
- remove DeformationGradientTerm.__call__(), new .function(), .get_fargs(),
  .get_eval_shape()
- update dq_def_grad()
docs: update developer guide - describe new Term attributes