TL;DR:
If you want to learn things you would never be exposed to otherwise
and actually have some grokness without strings attached:
Stay in school, but deliberately seek difficult courses on old-fashioned
topics such as compiler design, operating systems, electrical engineering
media fabrication (actually way cool), graph theory, set theory, etc.
Elif you just want a paycheck for the next few years working in some cool
framework or other flavor-of-the-week:
Drop out *in good standing* and get a job in some startup company with
the prior knowledge that it will fail, and if it doesn't a little
success will transform the place you liked into a place you don't, and
if not then you will eventually go from solving trivial problems you do
know how to solve to solving non-trivial problems you lack the grokpower
to tackle because you neglected to pay your intellectual dues.
Else:
Change major, because this stuff just isn't for you, and I can't bear to
knowingly recommend that someone of obvious intelligence relegate
themselves to being another member in the Mole Man Army.
There are some interesting responses here; I can only tell you what I have experienced myself. What follows is a huge digression, but one that will hopefully illustrate the fact that you can't know the future, opportunity is entirely random, and old-fashioned hard work (often academic in nature) is the only way to satisfy the "preparedness" part of the luck/genius equation.
I got involved in phreaking and computers when I was quite young, wrote quite a bit of useful software as a kid, never did homework but aced all my tests in school, did well in sports by hiding my inner geek from the rest of the team, etc. I was (and still am) obsessed with the idea of eventually starting my own computing services (hardware, software, everything) company. I studied a lot on my own on subjects not taught in my school and my grades (ironically) sometimes suffered from it. An emotional/social rift opened between me and the idea of school, me viewing it as worthless, the system viewing me as a misfit. Probably not entirely different from you, though the threads of the tapestry no doubt differ.
Recognizing this wasn't a sustainable situation I requested that my father send me to a military school so I could be forced into a regimented program. I wound up attending a great military high school where the high school classes were taught by the same faculty as the college classes and learned a great deal about myself, the world, and the nature of opportunity. I also learned just how amazing great educators can be -- a lesson that didn't stick until a decade of reflection had passed. I also decided to not attend college against the advice of my mentors and advisers. My parents, however, let me do whatever I thought best.
My family is a bit plain: if I fail they won't help me because I've proven that I was a bad egg; if I succeed, however, I will be celebrated and given responsibility. I thought this terribly cold when I was younger, but have come to realize this is how the successful parts of the world work, except in the real world there is a strong chance nobody will subsidize your food or shelter (and if someone does it is usually a sign of an impending systemic failure). Though this has seen me in a few tight situations I have to say it has taught me a lot, and if my siblings and our general family relationship are any indication, it seems to work amazingly well.
I didn't land an awesome programming job after turning down university acceptance letters. I got interested in the larger world and spent almost the next two decades traveling, teaching (yeah, weird), or in this or that military (most recently involved in the whole GWOT thing, first in the Army, then in a few different contract organizations). My ultimate goal of running a computing company was always in the back of my mind, but the time was never right and I was so involved in other things it just seemed like a different world.
Until I got out. Now I have started that company, things are finally beginning to pick up (after a long dry stretch, survivable mostly because of the community surrounding my ex-military relationships), and I can see a tiny bit of light at the end of this long, extremely difficult, lonely tunnel.
Which brings me back to school and my not having been exposed to much of it. Because I didn't go to school I didn't even know there were canonical references to a huge set of problem spaces. I didn't know how freaking important it was to learn the precise differences between analog and digital data before trying to solve a really expensive customer problem that requires a customized hardware solution (and before you think that is a simple difference, go study up on it). I didn't really understand that the hyped frameworks are basically giant cake-sacks of leaky abstractions which fail the moment a new real-world requirement is thrown at them (usually something innocuous, like a customer saying "in the next version, we really need screen X to show Y" -- and of course you, not realizing how scary a statement that is, simply say "sure!"). I had no idea how prolific operating systems are, or how fleeting their lives in the market. I didn't understand exactly how software is the thing that lets us emulate different machines within other hardware machines, and why that nugget of esoteric knowledge is so incredibly central to everything I will likely be doing for the next few decades of my life (and I say "life", not "career", deliberately). I hadn't even matured enough as a programmer to develop a healthy baseline disdain for all programming languages.
But I also realize now, after having interviewed and hired people, that most schools simply do not teach the things that need to be taught, and most people are simply too dull to grok the things I need them to grok and would have failed out of the courses I wish they had attended. And that sucks.
So looking at it from the other side of the table, I would urge you to not go on a 20-year action adventure as I did (unless that's your thing; I have no regrets) but not simply "stay in school" for the sake of getting some worthless paper that conveys nothing about your actual potential to a prospective employer such as myself. Instead I would urge you to seek out the hardest, most difficult low-level and high-level courses you can find that deal with computing. This may require that you achieve decent grades in some courses now to be eligible for the interesting stuff later, which may simply be the universe giving you a lesson in humility and due-paying (hint: it is easier to control your own expectations about life than to control the outcome of each phase of it).
You'll never "finish" in this field, so what you should seek is a strong foundation in leading concepts and underlying principles. You'll do a lot of learning/discovery by composing new ideas from seemingly unrelated concepts you've picked up by way of association with stellar people in your studies, but long after the base ideas were acquired. Being in a good comp-sci or engineering department is one of a very few ways of guaranteeing that you will constantly be exposed to such people. I view this as one of the most important elements of official schooling, and something online education will probably never be able to replicate (and hence I view resumes full of online degrees with suspicion; actually, I have my minions black out those lines before I get the resume if they think the rest of it is worthy).
But all of this is dependent on your goals, of course, which is why I wrote the if-elif-else clause above. I might be misjudging you, but I can easily imagine myself writing a very similar question two decades ago on Usenet, and wish someone would have written this sort of post out then (come to think of it, I may have had just such a conversation back then, and disregarded the advice as I was so wont to do).