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.
Merge pull request #70 from zendesk/dasch/dont-cast-to-symbol

Avoid creating Symbols based on user input
Describe parameterized variables in the README
Add "parameterized variables" to the ToC
Describe `setup!` in the README
Refactor Compiler
Add stricter parameter requirements
Extract a ReferenceCompiler
Allow an optional parameter
Fail properly when a method has an invalid signature
Initialize with the method name
Move more compilation logic into ReferenceCompiler
Allow passing keyword parameters to references
Allow mixing positional and keyword arguments
Add improved error handling when parsing params