JS: refactor Abilian.api to make it more pluggable

The API is now defined as a dict on application: app.js_api. Components
can connect to signal abilian.core.signals.register_js_api and modify
the dict. url_for() is garanteed to work when signal is emitted.

All dict elements must be JSON-serializable.
form macro / SingleView: use field.is_hidden
render_for_edit: don't render label for hidden fields
macros form field: generated markup cosmetic
single view: try to render field if render_empty flags is set

this allows to have widget render something even if actual field value
should be skipped