orm: Implement select_related (manual only)

Implement select_related() for querysets. Now, related models are loaded
along with the requested models automatically.
orm: Support constant constraints

For instance
join table2 on (field = 'T' and table1.field_id = table2.id)
orm: Implement object caching

Ensure that for a model class name and primary key, there is only one object
floating around in PHP runtime. In doing so, ensure that models loaded from
the database are not duplicated in memory. Instead, check the cache when
creating objects to see if the object has already been loaded. If so, use
the loaded model rather than a new instance. This ensures that updates to a
model object are reflected consistently.

Also, short circuit lookups so that the cached version is retrieved without
consulting the database.
orm: Support primary key updates
orm: Convert Page model to ORM
kb: New concept for landing page and FAQ view

Move the attachments to the sidebar, add the concept of language-specific
attachments. Add a sidebar to the front page. De-emphasize the "open new
ticket" button. Add a knowledge base search feature to front page and also
add the concept of "featured" articles and categories on the front page.
orm: Implement annotation support

This allows for things like related COUNTs and such:

```php
ThreadEntry::objects()->annotate(
    'attachment_count'=>Aggregate::COUNT('attachments')
    )
    ->filter(array('attachments__type__contains'=>'image/'))
    ->filter(array('attachment_count__gt'=>0));
```
This would find all thread entries with at least one image attached.