Add function to check each argument has valid value
Change these global variables to extern const
Fix bug of template function not accepting extern variable as template parameter
Fix bug in peer selection
Add function to randomly shuffle a vector
Add option for compiling both release and debug
Corrent the path of bin
Fix bug in event processing

This bug occurs when one client send request(s) to peer, however,
peer(s) not admit this request in time, then leave swarm.
So, it cause client can't get pieces and request others.

Current solution is let peer to check recv_msg_buf before leaving the swarm,
if find unprocessed request(s), then notify the requestor to do requesting again
(in implementation: genrate each requestor's Piece-Req event).