Optimization

This is a large refactoring of the database models to produce more consistent and contextual methods. This means that each model has methods like progress, totalHours, totalPoints. These methods, when it make sense, allow you to pass other models as a context parameter. For instance if you pass a User object to a sprint.totalHours(user) method, it will return the total hours of the sprint attributed to that user.

This context filtering will allow for a new object, maybe Vector (because we all love math) which provides a context object plus a two timestamps to produce time based context.