modify worker to have some control options
Add a level of indirection for calculated grammars.

Grammars are stored in a separate collection, grammar_list. Dsets
only store a pointer (ReferenceField) to their grammar list, but
it can be accessed using the grammars property. This increases
performance, as the grammar list can be quite long, and is now only
pulled from the database when it is explicitly asked for (ie
dereferenced lazily)