I'm working on an IoT App which will do majority of the basic IoT operations like reading and writing to "Things".
Naturally, it only makes sense to have an event-driven server than a polling server for real-time updates. I have looked into many options that are available and read many articles/discussions too but couldn't reach to a conclusion about the technology stack to use for the backend.
Here are the options that i came across:

Meteor
Python + Tornado
Node.js + Socket.io
Firebase
PubNub
Python + Channel API (Google App Engine)

I want to have as much control on the server as possible, and of course at the best price. What options do i have? Am i missing something out?
Personally, i prefer having a backend in Python from my prior experience.
You're comparing apples to oranges here in your options. The first three are entirely under your control, because, well, you own the server. There are many ways to get this wrong and many ways to get this right, depending on your experience and what you're trying to build.
The last three would fall under Backend-As-A-Service (BaaS). These let you quickly build out the backend of an application without worrying about all the plumbing. Your backend is operated, maintained by a third party so you lose control when compared to your own server.

... and of course at the best price

AWS, Azure, GAE, Firebase, PubNub all have free quotas. If your application becomes popular and you need to scale, at some point, the BaaS options might end up being more expensive.
Real-time backend for IoT App