Makes route system more complex

This pull request takes the idea of controller-less routes "to the next level". Let's take a look how it works:

First of all, routes are registered via a PIP with the default routes installed during the setup of WCF. The basic behavior didn't change, when a request takes place, all routes are checked, the first that matches wins and the correct controller is created. The new thing is how links are created using the `link`-template plugin. If you use `controller` as a string, everything is still the same. If you want to use an implementation of `IRouteController` (which is basicly a new interface since the two methods are new ones; the old ones don't exist anymore), things changed a bit: The controller is the database object: `{link controller=$dboWhichImplementsIRouteController}{/link}`.

So, let's take a look at an example: a bugtracker where you have different packages, each with an unique identifier like `com.woltlab.wcf`. Now, you want to call the package with all bug reports and suggestions this way: `domain.com/bugtracker/com.woltlab.wcf/` (where `bugtracker` is the folder of your application) and want to build all links within templates this way. With the current system, that's not possible, the new system allows this.

First of all, you define a new route:

```XML
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/maelstrom/route.xsd">
	<import>
		<route name="com.woltlab.wbt.package">
			<schema><![CDATA[/{packageIdentifier}/]]></schema>
			<partspattern><![CDATA[(\/|\-|\_)]]></partspattern>
			<components>
				<component name="packageIdentifier">
					<pattern><![CDATA[[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+]]></pattern>
				</component>
			</components>
		</route>
	</import>
</data>
```

Most things should be clear since they only reflect current method parameters. `partspattern` is new and is used by the route object to cut request urls and the route schema into pieces. This is necessary since the default pattern also uses points for cutting which in our case wouldn't be what we want - in general it makes the system more flexible.

Now, the `Package` class would look like this (only needed parts):

```PHP
<?php
use wcf\system\route\IRouteController;

class Package implements IRouteController {	
	/**
	 * @see	wcf\system\route\IRouteController::getRouteComponentValues()
	 */
	public function getRouteComponentValues() {
		return array(
			'packageIdentifier' => $this->packageIdentifier
		);
	}
	
	/**
	 * @see	wcf\system\route\IRouteController::getRouteName()
	 */
	public function getRouteName() {
		return 'com.woltlab.wbt.package';
	}
}
```

The object says which route it wants to be used and delivers the values used to build the route using the route schema.


I tested it as much as possible but without connected applications and I hope that there's no bug left. Have fun and be gracious ;).

(PS: Oh, there is one thing I forgot to "fix": If you have a schema like `{id}-{title}` and `{title}` is optional and you build a link without a title, there should be no `-`. I would fix that, if this pull request should be merged.)