Remove using directive in template files

Template implementations, although in separate .cc files, are included
in other translation units as headers, therefore it causes potential
name pollution if it includes symbols from other namespaces.
Add const modifier to toString functions
Pass by reference to avoid object slicing

The function signature is mistakenly declared to pass by value, which
causes object slicing. It won't work if Matcher is made into an abstract
class (with pure virtual method).
Add function to get description of matcher