MSVC11 support

1. use boost preprocessor to support variadic templates in msvc
2. use `find_package` to find boost library
3. some cmake files changes to support msvc