add kwargs to decorators.memoize

+ used frozenset to make kwargs dict hashable
- did not recurse into kwargs dict to freeze its values (which might be dicts)
- will fail if any kwargs have a dict or other not collections.hashable type
add GetSaleForm.sg (sales group) and remove sn (serial number) field
add sales group field GET argument processing

- also unfinished/untested is splitting series argument by commas instead of spaces
- TODO: compose series label as '-' or '|' or ','-sparated string
- TODO: allow lists of model numbers and sales groups within series label/string/GETarg