Pattern expander mechanism 

This implementation allows us to create multiple expanders for type patterns. 
Each expander can be created with unlimited amount of arguments. 
Supported argument types
 * [x] string
 * [x] number (float/integer)
 * [x] boolean
 * [x] null 
 * [x] array 

There is only one available expander atm. 
- StartsWith($stringBeginning, $ignoreCase = false)
- EndsWith($stringEnding, $ignoreCase = false)
- NotEmpty()
- LowerThan($boundry)
- GreaterThan($boundry)
- InArray($value)

Example expander usage: 

```php
$factory = new SimpleFactory();
$matcher = $factory->createMatcher();
$matcher->match("lorem ipsum", "@string@.startsWith('lorem')"); 
```

Syntax error in pattern expander will throw exception, example:

```php
$factory = new SimpleFactory();
$matcher = $factory->createMatcher();
$matcher->match("lorem ipsum", "@type@.expander('string',not_argument"); 
// Exception message: [Syntax Error] line 0, col 25: Error: Expected "string or number argument", got "not_argument"
```

Pattern syntax: 

```
@type@.expander(args).expander(args).expander()
```

You can use as many expanders as you need. You can also create expanders without arguments.