added working_dir accessor to Clone

Summary: required for plugin use.

Test Plan: None

Reviewers: jevripio

Reviewed By: jevripio

CC: phab

Differential Revision: https://sibld.phab.dev.bloomberg.com/D161
Arcyd: split abdt_branchmock data out to new class

So that abdt_branchmock and abdt_branch may have identical public
interfaces, break the internals of the mock into a separate class.

This separate class is free to have an interface with features useful
for testing.

Test Plan: $ ./precommit.sh
Arcyd: add test case to exercise 'NoTestPlan'

Test Plan: $ ./precommit.sh
add phlsys_tracedecorator for testing and debug

Move the 'logging decorator' from it's temporary home in abdt_branchmock
to a permanent home in phlsys.

Allow easy tracing out of method parameters and return values for speedy
debugging of mock and other objects in unit tests.

Test Plan:
Manually inspect unit test trace
$ ./precommit.sh
Arcyd: check conduitmock matches via dict not abc

Remove abdt_conduitmock and introduce a test suite for conduitmock which
checks the public interface of the mock is identical to the real thing.

Test Plan:
Manually introduce mismatching methods, check they are detected.
$ ./precommit.sh
Arcyd: trace conduitmock functions, add test todo

Make ConduitMock contribute to debugging by decorating it's methods with
the phlsys_tracedecorator.

Add a TODO for verifying the behaviour of the real conduit when updating
an accepted review with a new diff.

Test Plan: $ ./precommit.sh
Test: phab revisions stay 'accepted' after update

Assert that revisions in Differential stay 'accepted' after they have
been updated by a new diff.

Replicate this behaviour in the abdt_conduitmock and remove associated
TODOs.

Add extra convenience function for updating reviews with an empty diff.

Test Plan:
$ ./precommit.sh
Inspect review generated from differential test
fix: handle error when updating closed revision

Raise a 'phlcon_differential.UpdateClosedRevisionError' in the event
that this should happen, which abdt_conduit will convert into an
abdt_exception as appropriate.

Update tests to assert that Differential won't allow updates to a
revision that has already been closed.

Update the conduitmock to replicate this behaviour.

Test Plan: $ ./precommit.sh
Arcyd: optimise update_revision - reject if closed

In the event that we try to update a revision that is already closed,
reject the update without creating a diff.

Add some initial coverage of abdt_conduit methods, to be improved.

Test Plan: added breathing tests to exercise, $ ./precommit.sh
Arcyd: test conduit query_users_from_emails

Add some coverage for query_users_from_emails and more concerns to the
abdt_conduit test driver

Test Plan: $ ./precommit.sh
Arcyd: fix: handle bad unicode commit message

If there are bad unicode characters in a commit message then replace
them with the 'unicode replacement' character.

Exercise this new code with some new tests.

Test Plan: $ ./precommit.sh
Arcyd: test conduit can create review as user

Exercise the abdt_conduit creation of reviews

Test Plan: $ ./precommit.sh
Arcyd: test review creation with invalid base

Exercise the path for handling reviews with bad base branches

Test Plan: $ ./precommit.sh
Arcyd: test invalid branch author

Exercise the path for invalid / unregistered author on the review
branch.

Test Plan: $ ./precommit.sh
Arcyd: test no commits on branch case

Exercise path where there are no commits on the review branch.

Test Plan: $ ./precommit.sh
Arcyd: make branch and mock more alike

Make the abdt_branch and abdt_branchmock work more similarly when
abandoning a review.

Test the processrepo in the case where a branch has been deleted and
Arcyd needs to forget it.

Test Plan: $ ./precommit.sh
Arcyd: test branchmock iface matches real branch

Assert that the abdt_branchmock offers the same names on the public
interface as abdt_branch by comparing their dictionaries

Test Plan:
Manually add some mismatching functions
$ ./precommit.sh