Changes to `entries' management:
(for post-M2)

1.  Directories will now have flags stored in *2* places:  in THIS_DIR
    and in its parent's subdir entry.

    As a rule, a subdir entry will never contain any info other than
    the subdir's name and its flags.

    ==> We must change all code that adds/removes flags to manage dir
    flags in both locations.  (Mainly the merge_sync routines.)

2.  When retrieving a hash full of entries, the hash will represent
    *exactly* whatever information is available in the entries file.
    We will *not* traverse up or down directories in search of extra
    information.

    In particular, the only "inferences" of information allowed are
    listed here:

       * a file entry is assumed to inherit it's revision and URL from
         THIS_DIR, if none is specified.

       * all file and subdir entries implicitly inherit a 'delete'
         flag from THIS_DIR, if one is present.

    ==> Change resolve_to_defaults to stop traversing up and down, and
    only do the specific inferences above.

    ==> Change *ALL* callers of svn_wc_entries_read, and make sure
    they understand that they're getting a hash with missing
    information;  teach them to fetch the info they need.  This is a
    *big* change.

3.  The command 'svn rm dir' causes all subdirs of DIR to be
    automatically marked for deletion.  (And by inference rules, all
    files anywhere in the subtree as well.)

4.  The command 'svn add dir' only marks the one dir for addition.
    In the future, maybe we can add a -R recursive flag to the add
    command, or maybe people can just use 'svn import'.

