Add notes for chapter 8 of nand2tetris.

books/nand2tetris/notes/8_virtual_machine_ii_program_control.md
	-Add some notes for chapter 8, "Virtual Machine II: Program
	Control", of nand2tetris.
vmtranslator: write asm files, and read dirs.

vmtranslator/__main__.py
	-Make belated modifications to nand2tetris project 7.
	-Redefine `translate_file()` as `translate_path()`, which
	accepts both file and directory path arguments, and
	automatically writes compiled assembly files.
Update README to reflect changes in 587fa8f.

7_virtual_machine_1_stack_arithmetic/README.md
	-Update the README to reflect changes introduced in `587fa8f`.
	-Add an example of command-line execution.
Rename 7_virtual_machine_1_stack_arithmetic/.

books/nand2tetris/projects/
(7_virtual_machine_1_stack_arithmetic -> 7_8_virtual_machine)/
	-Rename the `7_virtual_machine_1_stack_arithmetic` directory to
	`7_8_virtual_machine`, since chapters 7 and 8 deal with the same
	project (a virtual machine translator) and will thus be
	implemented in the same package.
Document the parser module.

books/nand2tetris/projects/7_8_virtual_machine/vmtranslator/parser.py
	-Add docstrings to the module header, `clean_code()`, and
	`parse_line()`.
Remove uselessly defined __init__() methods.

vmtranslator/operations/(arithmetic_logic, memory).py
	-Several operation classes uselessly defined one-line
	`__init__()` methods that simply called `super()`; remove them
	and let inheritance automagically do all the work.
Introduce a parser state dictionary.

vmtranslator/translator.py
	-Redefine `translate()`: introduce a local `state` dictionary,
	which is ultimately passed down to `Operation.from_string()`
	and can be modified by some classes' implementations of the
	method.
	-Gets around having to use a global variable hack to generate
	UIDs for `LogicOp` operation labels, and is necessary to pass
	around the current function name for control-flow operations.

vmtranslator/
(parser, operations/(memory, operation, arithmetic_logic)).py
	-Modify functions called by `translator.translate()` to accept
	a `state` argument.
Add prototype operations.program_flow module.

vmtranslator/operations/program_flow.py
	-Add a prototype program-flow module, which implements all of
	the VM's program-flow operations (`goto`, `if-goto`, and
	`label`).
	-Define `ProgramFlowOp`, `LabelOp`, `GotoOp`, and `IfGotoOp`
	classes, with functional (and lightly tested) methods. Still
	need documentation.
Document the program_flow module.

vmtranslator/operations/program_flow.py
	-Add docstrings to the module header, all classes, and some
	methods. Hit-and-run documentation.
Miscellaneous pylint fixes.

vmtranslator/**.py
	-Miscellaneous fixes to silence `pylint` complaints: change
	variable names, add missing docstrings, etc.
Add an untested, prototype function_calling module.

vmtranslator/operations/function_calling.py
	-Add an untested, undocumented prototype of the
	`function_calling` module, which contains classes for handling
	function-related operations.
Filter/clean code line-by-line.

vmtranslator/parser.py
	-Rewrite `clean_code()` as `get_lines()`, which splits the
	argument code-block and cleans it with regex *line by line*,
	because regular expressions that attempted to operate on the
	entire corpus had to deal with some ugly edge cases and
	unnecessarily complicated things.
Fix if-goto bug. Minor operations modifications.

vmtranslator/operations/program_flow.py
	-Fix a bug in the assembly translation of `if-goto`
	(`IfGotoOp.to_assembly()`), which incorrectly expected a top
	stack value of exactly "true", or`1111111111111111`, as opposed
	to anything non-zero.
Fix incorrect return assembly translation.

vmtranslator/operations/function_calling.py
	-Fix a bug in the assembly translation of `return`
	(`ReturnOp.to_assembly()`), which didn't store the return
	address in a temporary variable and opted to access it directly
	in its expected position in memory, before executing
	instructions that could potentially overwrite the value at that
	position.
Don't pop current function name on return.

vmtranslator/operations/function_calling.py
	-Don't remove the current function's name (from the parser's
	`state`) on the creation of a `return` statement, because it's
	not necessarily the last statement in a function.
Persist parser state across multiple files.

vmtranslator/(__main__, translator).py
	-Persist the parser's state across the translation of multiple
	virtual machine files, in order to preserve label uniqueness in
	the single compiled assembly program.
Fix incorrect implementation of static memory.

vmtranslator/operations/memory.py
	-The initial implementation of static memory (in the context of
	`push` and `pop` commands) was incorrect, simply treating it as
	any other static segment and not creating globally unique
	labels.
	-Modify `MemoryOp.__init__()` and `MemoryOp.from_string()` to
	accept and pass a `module` argument, which is used by the newly
	defined `MemoryOp._get_static_label()` to create unique labels
	for operations on the `static` memory segment.

vmtranslator/translator.py
	-Keep track of the current file ("module") in the `state`
	dictionary.
Documentation new additions to operations.memory.

vmtranslator/operations/memory.py
	-Document the recent additions to the `memory` module; update
	`MemoryOp` docstring, and add one to `_get_static_label()`.
Merge branch 'books/nand2tetris.8_vm_II_program_control' into books/nand2tetris

books/nand2tetris/
(notes/8_virtual_machine_ii_program_control.md,
projects/7_8_virtual_machine/)
	-Complete chapter 8, "Virtual Machine II: Program Control", of
	nand2tetris.