initial commit
accept: add browse acceptance test

Conflicts:
	features/steps/opc_diag_steps.py
cli: add main() entry point
cli: add CommandController.new()
cli: add CommandController.execute()
cli: add Command.parser()
cli: add browse subparser
cli: add Command.validate() raises NotImplementedError
cli: add BrowseCommand.validate()
cli: add Command.execute() raises NotImplemented
cli: add BrowseCommand.execute()
controller: add browse command
model: add Package.read() factory method
phys_pkg: add PhysPkg.read() factory method
phys_pkg: add PhysPkg.__iter__()

Conflicts:
	tests/test_phys_pkg.py
phys_pkg: add ZipPhysPkg.read() factory method

Conflicts:
	tests/test_phys_pkg.py
model: add Package.find_item_by_uri_tail()
presenter: add ItemPresenter.__new__() factory method
model: _PkgItem knows what kind it is
view: add pkg_item browse view