Allow placeholders in permalinks

Allow the regular placeholders (`basename`, `path`, `ext`) in permalinks. This is useful for setting permalink rules in frontmatter defaults (for example if I want my SCSS files in `/assets/scss/` to output to `/assets/css/`).

Changes will only break functionality for people currently using `:path`, `:ext`, `:basename`, etc. in their permalinks. Permalinks without any of these special symbols will remain the same.

Ref. #2475, #1712.
Let's restructure this. `#generate_url` should take a parameter – a template – that it uses as the first argument to `#inject`. That way we can have `#generated_permalink` and `#generated_url` use and memoize the permalink and template, respectively.

```ruby
def to_s
  generated_permalink || generated_url
end

def generated_permalink
  @generated_permalink ||= generate_url(@permalink) if @permalink
end

def generated_url
  @generated_url ||= generate_url(@template)
end

def generate_url(template)
  @placeholders.inject(template) do |result, token|
    # etc...
  end
end
```