Avoid creating Symbols based on user input

This removes a potential security issue: if untrusted users are allowed to have templates compiled, they could use random reference names to allocate memory that won't be reclaimed by the garbage collector.

This changes the API of the `method_available?` protocol a bit, passing a String rather than a Symbol.