Rewrite bug-visibility to handle dependent fields correctly in all cases.

Example of incorrect behaviour possible in old version:
1) Field A has value_field=C
2) Field B has value_field=D and null_field=C
3) Suppose field A gets initialised first. It triggers initialisation of C,
   C alters values of A and nullability of B. Then B gets initialised, and
   triggers initialisation of D, which alters values of B and overwrites
   its nullability previously altered by A.
Begin implementation of "custom" editable object classes.

* Separate 'class' and 'field' entities. Previous Fields were a combination of both a Field and a Class.
* Turn Component, Version, Milestone, Keywords, OS, Platform, Status and all custom select field value classes into generic classes.
  Remove most of their custom DB interaction code.
* Remove separate Milestone and Version CRUD user interfaces, edit them using generic UI.
* Allow to view history of generic objects.

TODO:
* Edit generic classes and their fields.
* Deal with possible form field name collisions.
* Search on generic objects.
* Generic autocomplete in select fields.