Smart match overloading

Adds ~~ overloading support. Does the same as == overloading, but means that when accepts it.

This works with ~~ as currently implemented, and I believe it'd continue to work with any of the changes to smart match that've been proposed on P5P.