Solving concurrency problem

- Error occurs when one TestNG test initializes multiple threads, which execute test steps in parallel. This is fixed by using concurrent data structure instead of plain LinkedList. This problem is quite hard to reproduce using artificial tests.

I have been able to reproduce this with tests similar to below, but you have to run it together with lots of other stuff in order to reproduce the error.

```
    @Test
    public void supportForConcurrentUseOfChildThreads() throws Exception {
        final int threads = 100;
        final Allure lifecycle = Allure.LIFECYCLE;
        lifecycle.fire(new TestCaseStartedEvent("uid", "name"));

        ExecutorService service = Executors.newFixedThreadPool(threads);

        final List<Callable<Object>> tasks = new ArrayList<>();
        for (int i = 0; i < threads; i++) {
            tasks.add(new Callable<Object>() {
                @Override
                public Object call() throws Exception {
                    for (int i = 0; i < 1000; i++) {
                        lifecycle.fire(new StepStartedEvent("test-step"));
                        lifecycle.fire(new StepFinishedEvent());
                    }
                    return "";
                }
            });
        }

        service.invokeAll(tasks);
    }
```
This exception is thrown.
```
java.util.NoSuchElementException
	at java.util.LinkedList.getLast(LinkedList.java:255)
	at ru.yandex.qatools.allure.storages.StepStorage.getLast(StepStorage.java:42)
	at ru.yandex.qatools.allure.Allure.fire(Allure.java:75)
```