Added NBOptionalPush API

NBOptionalPush adds item to circular buffer only if there is free
space. Otherwise it evicts passed item.

Also, fix a bug where we failed to clear item in the list after
calling "Get", thus preventing GC from collecting it.