It seems that bitcoin{d,-qt} can be crashed by being sent an inv of an unknown type. At least, it caused mine to:-

```
2016-11-08 00:45:36.470 ProcessMessages(getdata, 397 bytes): CHECKSUM ERROR expected=6d9dbcdf was=a1046737 peer=39585
2016-11-08 00:45:36.481 

************************
EXCEPTION: St12out_of_range       
CInv::GetCommand(): type=1373179482 unknown type       
bitcoin in ProcessMessages()       

2016-11-08 00:45:36.482 ProcessMessages(getdata, 397 bytes) FAILED peer=39585
2016-11-08 00:45:36.487 

************************
EXCEPTION: St12out_of_range       
CInv::GetCommand(): type=1373179482 unknown type       
bitcoin in msghand       

```

If the `throw std::out_of_range(strprintf("CInv::GetCommand(): type=%d unknown type", type));` in protocol.cpp supposed to cause the program to end?
NetMsgType::PONG,
    NetMsgType::NOTFOUND,
    NetMsgType::FILTERLOAD,
    NetMsgType::FILTERADD,
    NetMsgType::FILTERCLEAR,
    NetMsgType::REJECT,
    NetMsgType::SENDHEADERS,
    NetMsgType::FEEFILTER,
    NetMsgType::SENDCMPCT,
    NetMsgType::CMPCTBLOCK,
    NetMsgType::GETBLOCKTXN,
    NetMsgType::BLOCKTXN,
};
const static std::vector<std::string> allNetMessageTypesVec(allNetMessageTypes, allNetMessageTypes+ARRAYLEN(allNetMessageTypes));
CMessageHeader::CMessageHeader(const MessageStartChars& pchMessageStartIn)
{
    memcpy(pchMessageStart, pchMessageStartIn, MESSAGE_START_SIZE);
    memset(pchCommand, 0, sizeof(pchCommand));
    nMessageSize = -1;
    memset(pchChecksum, 0, CHECKSUM_SIZE);
}
CMessageHeader::CMessageHeader(const MessageStartChars& pchMessageStartIn, const char* pszCommand, unsigned int nMessageSizeIn)
{
    memcpy(pchMessageStart, pchMessageStartIn, MESSAGE_START_SIZE);
    memset(pchCommand, 0, sizeof(pchCommand));
    strncpy(pchCommand, pszCommand, COMMAND_SIZE);
    nMessageSize = nMessageSizeIn;
    memset(pchChecksum, 0, CHECKSUM_SIZE);
}
std::string CMessageHeader::GetCommand() const