P2P: Do not request blocks from peers with fewer blocks than us

If the remote node has a shorter chain, do not waste our
special getblocks request on them.
Send 'mempool' P2P command at the start of each P2P session
to query remote node mempool contents.
Send --help message to stdout i.s.o stderr

This allows fun stuff such as `bitcoin --help | less`, and more
easy piping to files.

Looking at other tools such as bash, gcc, they all send their help
text to stdout.
Translation update for 0.7.1

Also clarify translation process that the package `gettext` is needed to run string extractor.
Pull changed translations from transifex

There was also a new translation available, "ja" (Japanese), however
almost nothing was filled in yet, so I'm not including it for this release.
add LOCK() for proxy related data-structures

- fix #1560 by properly locking proxy related data-structures
- update GetProxy() and introduce GetNameProxy() to be able to use a
  thread-safe local copy from proxyInfo and nameproxyInfo
- update usage of GetProxy() all over the source to match the new
  behaviour, as it now fills a full proxyType object
- rename GetNameProxy() into HaveNameProxy() to be more clear
Merge pull request #1907 from laanwj/2012_10_translations

Translation update for 0.7.1
When datadir missing, show messagebox instead of printing error to stderr
Document RPC error codes

Replace all "magic values" in RPCError(...) by constants.
Add constants for HTTP status codes
Avoid crashes at shutdown due to printf() in global destructors.
Merge pull request #1908 from laanwj/2012_10_rpcerrors

Document RPC error codes
Merge pull request #1905 from laanwj/2012_10_startup_gui_error

When datadir missing, show messagebox instead of printing error to stderr
Merge pull request #1906 from laanwj/2012_10_help_stdout

Send --help message to stdout i.s.o stderr
Merge pull request #1859 from Diapolo/proxy_locks

add LOCK() for proxy related data-structures
change Q_WS_MAC -> Q_OS_MAC (Qt5 compatibility)

- I missed that one in my former pull
Handle incompatible BDB environments

Before, opening a -datadir that was created with a new
version of Berkeley DB would result in an un-caught DB_RUNRECOVERY
exception.

After these changes, the error is caught and the user is told
that there is a problem and is told how to try to recover from
it.
Merge branch 'BDB_DOWNGRADE'
Handle incompatible BDB environments

Before, opening a -datadir that was created with a new
version of Berkeley DB would result in an un-caught DB_RUNRECOVERY
exception.

After these changes, the error is caught and the user is told
that there is a problem and is told how to try to recover from
it.
Handle corrupt wallets gracefully.

Corrupt wallets used to cause a DB_RUNRECOVERY uncaught exception and a
crash. This commit does three things:

1) Runs a BDB verify early in the startup process, and if there is a
low-level problem with the database:
  + Moves the bad wallet.dat to wallet.timestamp.bak
  + Runs a 'salvage' operation to get key/value pairs, and
    writes them to a new wallet.dat
  + Continues with startup.

2) Much more tolerant of serialization errors. All errors in deserialization
are reported by tolerated EXCEPT for errors related to reading keypairs
or master key records-- those are reported and then shut down, so the user
can get help (or recover from a backup).

3) Adds a new -salvagewallet option, which:
 + Moves the wallet.dat to wallet.timestamp.bak
 + extracts ONLY keypairs and master keys into a new wallet.dat
 + soft-sets -rescan, to recreate transaction history

This was tested by randomly corrupting testnet wallets using a little
python script I wrote (https://gist.github.com/3812689)