Enhancing Templates#render's abilities

This pull request towards the following features (see #529 for original motivation):

* ability to render a template from a path, as Tilt already allows, with the cache automatically enabled
* ability to render a template without knowing the corresponding engine a priori. A logical consequence of the first point.

The pull request mostly extends the public API, in a backward compatible way, as follows:

    def render(view, options={}, locals={}, &block)
        # ...
    end

The `render` method becomes public. It also accepts a new signature allowing to omit the `engine` argument. The idea is to allow new calls such as:

    render engine, path_to_a_file    # where path_to_a_file is a recognized path object
    render path_to_a_file            # the engine is inferred using Tilt
    render :view_name                # the engine is also inferred from the existing file (ambiguous if more than one)

The implementation mostly replaces `compile_template` by a new greedy algorithm called `tilt_template`. The latter recursively discovers the parameters needed by Tilt::Template.new. The stuff seems fully backward compatible and passes all the tests. `compile_template` is kept for backward compatibility.