Greatly improve guessing of table names (and add guessing of index columns)

Table names and index columns can now completely be guessed. Guessing of
the application prefix was added with
94e60f3679791863a1c9f861fabdd3247b231eae, now table names and aliases
can also be guessed.

Therefore, the class name is splitted at capital letters and the those
parts are re-joined with an underscore. This is the default coding
convention that most DBOs adhere to and removes the necessity to specify
the table name & alias explicitly.  Developers can still either define
the table name (and alias) explicitly by setting the property or by
overriding the method.

The index column name can also be guessed. In most cases, it is the last
part of the class name followed by "ID", so that is what is guessed.
The index name can also still be set explicitly either by setting the
property or overriding the method.

A new internal, private & final helper method has been added for the
guessing of the table name / alias.

---

I have tested these changes against the 2.0 branch, they are backwards compatible with all WoltLab products.

These changes allow it to omit many of the necessary properties of a DBO, while still allow to set them to non-standard values if needed. 

I've tested it with the blog, you can make the `blog\data\entry\Entry` object inherit directly from `DatabaseObject` and remove the `databaseTableName` and `databaseTableIndexName` properties and it still works as expected.
This is only required in the `else` case (same below). Btw: The `else` should be in a new line.