Yeah, this is unlike me ;)

Here's why I feel like this makes sense
* `Template` really only exists to create JSON templates - it doesn't have a bunch of other methods that you might call and not need `as_json`.  In other words, if you create an instance, it's a pretty good bet you're going to call `as_json` on it.
* We don't lose any functionality by only exposing `resources` and friends as hashes (as opposed to rich objects) because templates don't construct rich objects, and if you pass them in to the constructor you already have a handle on them.
* We gain confidence in what `resources` returns by always returning a hash, as opposed to returning a hash in some cases and an array in others.

We could meet half-way and make `resources` convert `@resources` into JSON, in which case we get the consistency of `resoruces`'s return value without eager evaluation.  But as I said, I don't mind eager evaluation in this case.