Polish the code [read below]

+ Export common functions like average and memo to utils and consequently delete the now empty decorator module.

+ Refactor class Associations to extend defaultdict in order to be able to use the already defined methods on dict. Another solution that has been explored was using the ABC class MutableMapping, but it was easier to subclass defaultdict since we have a main defaultdict so we just want to extend its behavior.

+ Associations.__setitem__ makes a copy of the value as tuple so it can't change, Association.__getitem__ now safely return the tuple since it can't change.

+ Replace some overkilled lambda and map with list comprehension and generator in order to improve performances and readability.

+ Allow mixed use of column names and index in fragments and constraints declaration.

+ [memento] Replace 'is' with == and 'is not' with != when checking values different than None, in fact the use with None is safe since none is a singleton object, but it's not safe with for example with numbers bigger than 256 since 'is' is the identity check, and not the equality check.

+ Moved skip_probability from Loose.__init__ to associate method [default = 0].

+ Add 2 named arguments to Loose.associate method: 'print_stats_every' [default = 1000] and 'more_groups' [default = 5] to specify how many groups to add over (tuples / k) for each fragment.

+ Rename Loose.bruteforce method to Loose.associate_with_retries, we can specify the skip_probability [default = 0.05] and the named arguments that will be passed to Loose.associate

+ Table.attributes is now a list of attributes in the format (name, type), other functions changed to comply with this specification.

+ Added ListTable to manually specify attributes and data.