improve apply_lambda() and refactorings using it
refactoring for ast_walker and add non-const lvalue reference version of apply_lambda()
improve boost::variant helpers

- rename get() to get_as() to avoid ADL against boost::get()
- use boost::get instead of a visitor in get_as() and has()