Add high-level loom.transforms module

This adds a new high-level interface `loom.tasks.transform(schema, rows)` that accepts a schema.csv with datatypes like `boolean`, `sparse_real`, `optional_date`, and `text`. Eventually we should merge `loom.tasks.transform` into `loom.tasks.ingest` so users never need to deal with low-level types like `bb` and `nich`.

See https://github.com/priorknowledge/loom/blob/transforms/doc/using.md#input-format-