Allow PhutilDeferredLog to have no path on disk

Summary:
Ref T2860. Ref T2870. We have a few pieces of debugging/developer code which read information out of the Phabricator access log, but we don't guarantee that it exists.

Allow it to have `null` as a file to write to, which means "don't write to disk", so we can guarantee it exists and the object can be used in other ways by the application.

Arguably this is a little goofy since we're using the object as a key-value store, but the nature of the deferred log (which must exist for the duration of the application, and must accumulate values as execution proceeds so that it can write as often and as much as possible) means that it's fairly well-suited to such use.

Test Plan: Added unit tests.

Reviewers: btrahan, chad

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2860, T2870

Differential Revision: https://secure.phabricator.com/D5532