Change the design of REST API classes

* Some refactoring was done to reduce repeated code.
* A class decorator was devised for representing resources under other
  resources, which replaces metaclass-based design. This makes code a
  little bit easier to understand.
Supply more fixture data for catalog

* To test catalog data from multiple campuses.
Make some relationship attributes joinedload-ed

* This prevents additional query emission when such attributes are
  accessed.
Refactor & bug-fix on catalog API code

* `query(cls, **kwargs)` method of `ResourceWithQuery` class now makes
  query object in different way, which allows aliased class object to be
  used in query. For this, default query class for SQLAlchemy session
  was set to `flask.ext.sqlalchemy.BaseQuery`.
* A bug was fixed which `Entity.get()` raised a
  `sqlalchemy.orm.exc.MultipleResultsFound` exception when the query is
  joined with other models.
* A bug was fixed which `query(cls, **kwargs)` did not worked as class
  method correctly when decorator `when` was applied to subclasses of
  `ResourceWithQuery`.
Make result of collection API sorted by id
Abort with status code 404 when entity isn't found
Refactor catalog API test code

* `Url` class now has a new method named `append(self, child_url)` which
  appends another `Url` object after itself. The prefix of `child_url`
  will be ignored.
* Functions testing API endpoints for children entities of campuses was
  moved to test case classes of which the type of these entities is. For
  example, test function for API endpoint which gets a department object
  under a campus object is moved from `TestCampusApi` to
  `TestDepartmentApi`.
Add API endpoints for subject and course objects
Add API endpoints for `GenEduCategory` objects

* Assertion for `category` attribute of `GeneralCourse` object was added
  to test function.