Add use chan interface{} as data source, and finish basic testing
add nil parameter checking
add basic error handling, and restructure testing code
add error handling when receive the result from future channel