Feature/sql permission checks

Reimplements permission checks in Arel/SQL which in turn improves extensibility and performance. Adds various performance improvements on other layers.
Avoid multi-line ?: (the ternary operator); use `if`/`unless` instead.