Memory allocation

When allocating memory in Banshee it is prefered (but not required) to use Banshee's allocator functions instead of the standard new / delete operators or malloc / free.

Use bs_new instead of new and bs_delete instead of delete. Use bs_newN instead of new[] and bs_deleteN instead of delete[]. Use bs_alloc instead of malloc and bs_free instead of free.

This ensures the Banshee can keep track of all allocated memory, which ensures better debugging and profiling tools and ensures the internal memory allocation method can be changed in the future.

// Helper structure
struct MyStruct
{
MyStruct() {}
MyStruct(int a, bool b)
:a(a), b(b)
{ }
int a;
bool b;
};
// Allocating memory the normal way
MyStruct* ptr = new MyStruct(123, false);
MyStruct** ptrArray = new MyStruct[5];
void* rawMem = malloc(12);
delete ptr;
delete[] ptrArray;
free(rawMem);
// Allocating memory the Banshee way
MyStruct* bsPtr = bs_new<MyStruct>(123, false);
MyStruct** bsPtrArray = bs_newN<MyStruct>(5);
void* bsRawMem = bs_alloc(12);
bs_delete(bsPtr);
bs_deleteN(bsPtrArray, 5);
bs_free(bsRawMem);