Add --single-file-directory option: create single directory with all linked files.

This new option copies all files to the directory specified as an argument
to the --single-file-directory option, and also creates dummy shorter
filenames for the files.

This feature was implemented to get around a problem found when zip'ing
the spreadsheet up with the supporting files for users on Windows.  The
Windows users encounter the error 0x80010135 related to some of the ZIP
files going beyond the maximum path name length on windows.  Apparently,
opening ZIP files with long path names just doesn't work on Microsoft
systems.  I've suggested our accountants switch to a Free Software
operating system, but they declined.
Began work on script to reconcile bank accounts.

The goal here is to take as input an account, a monthly balance amount
that appears on a bank statement, and the date of that bank statement and
output the list of transactions that likely weren't cleared properly as of
that date that caused the balance in the accounts to fail to match the
balance that appeared on the statement.

Note that determining this answer requires solving the known NP-Complete
problem called the subset sum problem.  There is a known pseudo-polynomial
dynamic programming solution to this problem, but it's still exponential
in the size of the numbers you have to balance.

So, if you have *big* account balances, this will make take quite a while
to run.  For smaller accounts, the pseudo-polynomial solution might be
helpful.  (BTW, the wikipedia entry on the subset sum problem isn't, at
the time of this commit, particularly good, but it's "good enough" to give
you a sense of what the subset sum problem is:
    http://en.wikipedia.org/wiki/Subset_sum_problem

)

I originally wrote the subset sum problem solution implementation here:
  https://gitorious.org/bkuhn/small-hacks/commit/2dca069d810b61cdfad46e00abcb1a3edaf56d1b

The code is just cut and pasted in here with some minor modifications.

This rest of this first commit just has that aforementioned paste, plus the
beginnings of the CLI and query to run to get the proper entries.
Basic implementation probably correct, but needs much RAM.

This is the basic implementation but for large numbers, it needs a *LOT*
of RAM.
Loop through to build smaller sets when testing.

Usually, transactions that didn't appear are nearby in date to the statement
date.  This loop cycles through.  Overall, this would take longer to find a
solution, but since most solutions are in the early dates "back" from the
statement date, this will probably be faster in typical cases.
Rename the function to note it's the dynamic programming one.
Support for a list of known checksums of files already copied over.

For the times when we want to make shorter names of files by doing copies of
the documentation files for hyperlink usage, allow input of a new command
line option which is a list in the form of:

  PATH_TO_FILE : sha25sum

so that those files can be used rather than new copies made.
Default to brute-force subset sum solution.

The dynamic programming version of the subset sum problem required far too
much RAM for larger bank balances.  Meanwhile, the brute-force is not to bad
now that the loop tries the closer dates *first*.
Finish reporting details for STDOUT; change command line arg to bank balance.

Report in CSV now goes to STDOUT.

The command line argument that was the difference to seek is now the bank
balance.
Start search from date: easy way to resume searches.

Instead of always starting a search from the end date, allow a CLI option
that is the data to use for the start of searching (back from the end date).
This is useful when resuming a search (since they take a long time).
Support for title: field, to name sheets in the ODS file.

If "title:SOMETHING" occurs in the CSV file, use SOMETHING as the title of
the sheet.
Correct regular expression for account queries to avoid inclusion of sub-accounts.

The previous queries had a bug whereby an account in the form "A:B" would
include all transactions for sub accounts such as "A:B:C".

That's not the intended effect.  Entries should appear in the lowest level
account, and not in their parent.

The regular expression now is anchored at start and finish in both queries to
ensure this works correctly.
Remove output of TXT files.  CSV output is adequate.
Correct account names due to renaming of Conference accounts in chart of accounts.
This could be for any period, not just the FY.
Improve spreadsheet and debugging output.
Searching is better when you can set the begin date, end date and then go back from begin date.
Sort solution by date in output.
Rework report to be just two files (disbursements and receipts).
Ensure that tagged linked files appear for all lines.
Remove extra newline
Subtotaling of BRANCH DEPOSITs.

The auditors seem to like to see the check deposits made to be subtotaled, so
that's done here.  I attempted to aid this by using a --sort and/or
--sort-xacts option (or combo thereof) on the ledger command line, but this
didn't work as expected.  I opened a bug in ledger about this:
   http://bugs.ledger-cli.org/show_bug.cgi?id=901