Made grammar element contain a definition
Doxygen update
Wrote out reducer's reduce function

In doing so, also brought in several changes:

- Productions now consist of a list of elements,
  a definition of what they reduce to, and a translator

- Grammar is no longer a struct.
  Instead, a grammar is just a list of productions

- Began to remove immutable struct members.
  See http://stackoverflow.com/a/24234453/713961
Removed more immutable struct members

Again, see http://stackoverflow.com/a/24234453/713961
Removed writeln from unit tests

This allows us to make most unit tests @safe
and lets us avoid pulling in std.stdio