Add Querier Class

A querier is who makes the queries. In this case we want to query the loose-associations DB but without having to know in which fragment the attributes are stored and without having to join those fragments manually (it often leads to errors).
The querier class simplifies the task using a slightly extended SQL syntax:

1. Prefix with a question mark (without spaces) every attribute for which you want the querier to automatically figure out the fragment and make the necessary joins.
2. Use 'FROM ?' and the question mark will be automatically replaced with the correct table (joins included)

For example the query:

  SELECT ?salary FROM ? WHERE ?name = "Alice"

is translated to (here salary is in fragment 2 and name in fragment 0):

  SELECT salary FROM associations AS A LEFT JOIN fragment_0 AS F0 ON A.group_0 = F0.group_0 LEFT JOIN fragment_2 AS F2 ON A.group_2 = F2.group_2 WHERE name = "Alice"

Note that the table names are known because it uses the same schema as Exporter. The exported catalog is used in order to know the fragment each attribute belongs to.
All the needed joins are automatically enforced and no unneeded one is created. If, for example, both salary and name are in fragment 2, the querier would have expanded the previous query as:

  SELECT salary FROM fragment_2 WHERE name = "Alice"

querier.py can be used either as module or as standalone script. It can be executed from a CLI passing as argument only the name of the database exported by the Exporter. The user will be given a prompt in which she can insert her queries.

Note: LEFT JOIN is used because it's faster in Sqlite and should be at least as fast as an INNER JOIN in other databases since we always have a corresponding value in every other joined table.