define monomials using dictionaries

Because it seems a little more readable to say Monomial({'x': 1, 'y': -1}, 5) than Monomial(['x', 'y'], 5, [1, -1])

I really like the idea of `_vars` being a dict. I'm tempted to force this (i.e. remove the `a` argument, require `_vars` to be either a dict or string, and update unit tests accordingly). Any reason(s) to support the old way, or should we go ahead and kill it?