Add Non-blocking Scanning functions
- Add NonblockingScan - This function returns on scan request instead of blocking. It is the caller's responsibility to ensure the state of scanning is maintained.
- Add StopScan - This function should be used with NonblockingScan. If the blocking Scan function is used and this function is called, then the scanning context will not exit and the thread which started scanning will be stuck.