Make non-canonically-encoded transactions non-standard

The length of vectors, maps, sets, etc are serialized using
Write/ReadCompactSize -- which, unfortunately, do not use a
unique encoding.

So deserializing and then re-serializing a transaction (for example)
can give you different bits than you started with. That doesn't
cause any problems that we are aware of, but it is exactly the type
of subtle mismatch that can lead to exploits.

This pull is the first step to enforcing canonical encoding; it
ignores any transactions received via 'tx' messages if they use
non-canonical CompactSize encoding.