Add custom entry template mechanism

Adds the ability to register custom templates for rows on the entries listing for set pages.

```rb
# app/slices/foo_set/foo_presenter.rb
class FooPresenter < PagePresenter
  def self.columns
    {
      name: 'Name',
      view: 'View'
    }
  end

  def name
    @source.name
  end

  def view
    @source.path
  end
end
```

```js
// app/assets/javascripts/admin.js
slices.registerEntryTemplate('view', function(key) {
  return '<td class="view"><a href="{{view}}">External link</a></td>';
});
```

This implementation depends on `key` being unique across the various sets an app may use. If necessary we could look at hierarchical namespacing i.e.

```js
slices.registerEntryTemplate('view', function(key) {
  return '<td class="view"><a href="{{view}}">External link</a></td>';
});

slices.registerEntryTemplate('foo:view', function(key) {
  return '<td class="view"><a href="{{view}}">External link</a></td>';
});

slices.registerEntryTemplate('bar:view', function(key) {
  return '<td class="view"><a href="{{view}}">External link</a></td>';
});
```

Where entry templates for the `view` field would use `foo:view` in the `Foo` set, `bar:view` in the `Bar` set and `view` otherwise.