Add function support

These commits add SQL function support across Scaffold's database system.

# Usage

```php
<?php
// Get a random user
$users = new ModelUser();
$users->find[
    'order' => [
        Database::func_random()
    ],
    'limit' => 1
]);

// Gets the count using our system
$users = new ModelUser();
$users->alias('count', Database::func_count('*'));
echo $users->count;
// 1

$user = new ModelUser();
$user->create([
    'name' => 'Charlie'
]);
echo $users->count;
// 2

$users = new ModelUser();

echo $users->max('id');
// 2

echo $users->min('id');
// 1
```

# Changelog

This pull request added the following two classes.

 - `DatabaseQueryBuilderFunction`
  -  Base class for generating strings for functions in Scaffold. Has a method for each of the languages Scaffold supports, currently only SQL, and has a map of fallbacks (`SQLite => 'SQL`). 
 - `DatabaseQueryBuilderFunctionRandom`
  - An example of a function that doesn't use it's name (`random`) to generate the string. Instead, it returns a custom string `RAND`. We'll probably need to add a lot more of these.

It adds the following service

 - `database.query.builder.function`
  - Checks if a custom class exists for this function, and returns an instance of that custom class, or the base `DatabaseQueryBuilderFunction` class.

`Database::__construct` has been modified to not need an instance of Config passed to it if it has been initiated before.

`Dynamic` has been modified to support being an alias for a class method. Simply pass the same array you'd pass to `call_user_func`

The following methods have been added

 - `Database::func_*`
  - This creates the object that is recognised as a function across the system. The object has only one method, `as`, which allows you to alias the function (generating SQL strings like `SELECT COUNT(*) AS `count` FROM ...`)
 - `DatabaseQueryBuilder::val`
  - This is a chained helper for the `vals` section of `query_opts` for SELECT statements.
 - `DatabaseQueryBuilder::is_func`
  - Tests if a value is a valid function object.
 - `DatabaseQueryBuilder::func`
  - Converts a function object to the string required.
 - `ModelDatabase::value`
  - `__get` is now an alias for this. We can now pass function objects to it. Results of functions will never be cached.
 - `ModelDatabase::alias`
  - Alias properties. Allows you to call functions using properties.
 - `ModelDatabase::__call`
  - `__call` will create function objects with the name of the function and any args passed to it, which is then passed to `ModelDatabase::func` (The function that `ModelDatabase::value` uses for function objects) 
 - `ModelDatabase::random`
  - Returns a single random row. 

The following bugs have been fixed

 - `Database::__callStatic` successfully passes unknown functions through to the driver.