August 10 2014: Continuing on the Parser
	Modified files:
		css_muncher:
			Removed many empty newlines.
			prints the bnfParser tokens and calls the parser
			parse method.
		bnfLexer:
			Updated to include a basic (non-compound) type.
			This will be matched directly against what comes
			out of the lexer.
			Include new parenthesis control over evaluation
			order.

			Also added macros defining these new types.

		parser:
			Added new Symbol object.
			The symbol is a container for handing the
			creation of the state machine nodes. With it,
			the parser can build the state machines from bnf
			grammars.
			Symbol Methods:
				get_name: Returns the name of the symbol

				get_head: Returns the first node
				representing the symbol's state machine.

				set_head: Set the symbol's first node.
				is_recursive: Returns True if the symbol
				definition is recursive, otherwise
				returns false.

				expand: Expands the definition of the
				symbol. If the symbol is recursive, it
				will simply print the name of the symbol
				again.

			Operations that the parser will need to do:
				Concatenation:  +
				We will need to be able to concatenate
				two graphs or two nodes.
				Concatenation of two nodes results in
				an edge from the left hand node to the
				right hand node.
				Concatenation of two graphs results in
				the NullNode of the left hand graph
				being removed and replaced with the
				first node of the right hand graph. If
				the start node has multiple outputs,
				each will be entered as an alternate
				output in the output of the last
				non-NUll node of the left hand graph.

				Alternate: |
				We will need to be able to select
				alternate nodes or alternate graphs.
				Alternate graphs will result in the
				start (empty) node having output edges
				from the start node to each of the
				output nodes of the start node for the
				second graph. The heads will be the
				same.
				Adding an alternate node will result in
				an edge from the node on the left hand
				side to the node on the right hand side.
				Multiple will result in each being drawn
				from the first node in the chain.

				Difference between concatenation and
				alternate of nodes. Concatenation of
				multiple will result in a linear set of
				edges going from the first through the
				second, to the nth node.
				Alternate of multiple nodes will result
				in a new branch from the first node to
				each node in the chain of alternates.

				Any concatenation within the alternate
				chain will result in in that being
				concatenated within the branch. Using
				parenthesis for containing alternate
				chains is recommended.
			Added a Multiple definition error, which is
			thrown by the parser when it comes across
			multiple definitions for the same symbol. This
			is a critical error and should halt forward
			progress.