UP-4131 Add caching, SpEL expressions to SqlQuery portlet

https://issues.jasig.org/browse/UP-4131

Enhancements to framework portlet SqlQuery include:
- configurable cache of results (with default available cache to use)
- per-user caching
- SpEL expressions using request, userInfo, and @bean in SQL Query
So.  If the cache key doesn't include the SpEL substitution, then isn't it potentially going to get erroneous cache hits where different requests with different runtime values generate the same cache key even though they're different queries?

The way that the viewing user might affect the data is by the username or another user attribute being included in the ultimate query, right?  So if the cache key included the SQL query *with* all substitutions completed, then we wouldn't need the per-user switch on cache scope -- users could share the cache and if the user identity affects the query then they wouldn't generate colliding cache keys anyway?