I don't know how you calculated your contracts RAM consumption, but the devil lies in the details.
Using an index is always connected to sacrify some memory for speed. This is a well researched database topic. An index is an optimized datastructure with some overhead which organizes data records e.g. in an tree like structure. You can read more ...
Usage of RAM for an account:
$ cleos get account <account_name>
Maximum RAM of the network (max_ram_size):
$ cleos get table eosio eosio global
Unused RAM of the network:
$ cleos get table eosio eosio rammarket
confused00 should have made this response as he/she is correct.
RAM must be freed before you can sell it.
For a dev this means you have to release your claim on the RAM to sell it
For an end user this means you need to see how the application you're dealing with has consumed your RAM and execute the command that is hopefully there to "free" that RAM so ...
There was no need for any initial eos token balance for the bancor algorithm to work properly.
The bancor algorithm calculates the price based on initial parameters set in the code and the current balance of both sides of the deal. In this case, the amount of RAM and amount of EOS in its bags and the amount in the buy or sell order requested.
In the early ...