On the log-addressing branch:  Implement a reordering pack algorithm
for logically addressed data.  The algorithm / heuristics is explained
at the top of the pack.c as well as throughout the code.

Also, we provide an updated order_dir_entries that takes an additional
revision parameter picks the appropriate strategy depending on the
revision's addressing mode.

Once the branch got reviewed & merged, the implementation will get
refined according to collected tracing data.

* subversion/libsvn_fs_fs/pack.h
  (svn_fs_fs__order_dir_entries): add revision parameter

* subversion/libsvn_fs_fs/tree.c
  (fs_dir_optimal_order): update caller to provide the parameter

* subversion/libsvn_fs_fs/pack.c
  (): document general packing / reordering strategy
  (DEFAULT_MAX_MEM): limit memory used for temporary data structures
  (path_order_t,
   reference_t): new types describing item properties & dependencies
  (pack_context_t): add bucket files and containers for reorder info
  (initialize_pack_context,
   reset_pack_context): update
  (write_null_bytes): new utility used when writing pack files

  (compare_dir_entries_format7): optimal request order for log. addressing
  (svn_fs_fs__order_dir_entries): select optimal request order depending
                                  on addressing mode

  (copy_item_to_temp): generic 2nd phase copy function used for all
                       but text reps and noderevs

  (get_item_array_index,
   add_item_rep_mapping,
   get_item): functions to populate and consume the list of items for
              noderevs and text reps

  (copy_rep_to_temp,
   copy_node_to_temp): 2nd phase copy functions for the above items;
                       build dependency graph as well

  (compare_path_order,
   compare_references,
   sort_reps): implement the sorting stage for noderevs and text reps

  (compare_p2l_info,
   sort_items): implement the sorting stage for everything else

  (get_block_left,
   auto_pad_block,
   store_items): copying items from temp to pack file;
                 write p2l proto index file

  (compare_ref_to_item,
   find_first_reference,
   is_reference_match,
   select_reps,
   copy_reps_from_temp): text rep and noderev placement logic based
                         on sorted item descriptions

  (compare_p2l_info_rev,
   write_l2p_index): generate the l2p proto index file

  (pack_range): new reordering packing logic
  (pack_log_addressed): limit memory usage;
                        select the packing strategy depending on size
  (pack_rev_shard): update caller


git-svn-id: https://svn.apache.org/repos/asf/subversion/branches/log-addressing@1512914 13f79535-47bb-0310-9956-ffa450edef68