Probably it is necessary to have an actual device. But I'd rather not have to buy a phone with a contract. Is that possible?
The WP7 "emulator" in VS 2010 is not just an Emulator, it's a virtual OS identical (MS words, not mine) to the one on the phone. In theory when you develop in VS 2010 is should be no different than a physical device (GPS and such are handled a little differently of course). All the other phone development environments (to my knowledge) use a traditional emulator and not a virtual OS.
In my mind the only reason for a physical device is to test performance and UI responsiveness.
All you need is a suitable Windows PC - the dev kit including Visual Studio Express, a phone specific version of Expression Blend and and the phone emulator (which runs as a virtual machine) can be downloaded for free.
Once you have an application and want to test on real hardware you'll need to sign up to get access to the app store - $99/year if memory serves - and this in turn will allow you to unlock a number of phones (I believe 5).
I've heard of people who do Android development and just buy a bunch of Android phones to use as test and I would assume no contract there. There is an emulator that comes with the SDK, but that doesn't help when you use features such as Geo-location. The problem is that it may be hard to pick up a used WP7 phone since they have been on the market for only 4 months so far.
If you can stay away from geo-loc and other hardware specific features then you should be ok to use just the emulator.
As of earlier today they announced that they will be selling phones without contracts for devs!
They are currently still priced at $500 and up however.
WP7 Dev Phones link -UPDATE: Link is no longer valid/was originally mis-typed. I will see if I can correct this later.
You should set up a WP7 App Hub account so that you can get future updates like this, since that was how I was alerted to this.