Implemented the 'SkipLast' operator

Hi,

I implemented the `skipLast` operator #78.  I used `ReentrantLock` and `LinkedList` to implement it rather than `LinkedBlockingDeque` like `takeLast` #85 #140 for two reasons.

* LinkedBlockingDeque requires that count is greater than 0 but `skipLast` can accept 0. 
* LinkedBlockingDeque requires the elements can not be null but an observable can emit a null value.

In summary, `LinkedBlockingDeque` will cause issues like #413.

Please take a look. Thanks.